公平锁源码:
非公平锁的源码:
为了看这个tryacquire:
第一:非公平锁获取锁的方式,如果资源是可用的,那么非公平锁上来就先试着cas改变资源的占用;失败了就调用acquire;但是公平锁不会抢着获取;
第二个:在tryAcquire尝试获得资源的时候,产生差异;非公平锁尝试获得资源的可用,使用cas尝试;但是公平锁会先判断队列里面有没有其他线程;没有再尝试获得其他线程;有人就直接排队
非公平锁相比公平锁会多两次机会去抢锁;
优缺点:
非公平锁:效率低,即使队列里面有线程,那么也有可能抢到;
公平锁:效率低,但是能保证线程执行的顺序;因为他不会产生争抢;