synchronize是非公平锁

公平锁:线程获取锁的顺序和调用lock的顺序一样,FIFO; 非公平锁:线程获取锁的顺序和调用lock的顺序无关,全凭运气。

非公平锁逻辑基本跟公平锁一致,最本质的区别是,当当前的锁状态没有被占用时,当前线程可以直接占用,而不需要判断当前队列中是否有等待线程,

在非公平的状态下,新来的线程在入队之前会尝试抢一次锁,如果失败了就会乖乖进入队列,一旦进入队列是不能再次出来抢的,只能等待队列一个一个地执行完毕。所谓公平与不公平是指新来的线程会不会在入队之前尝试「野蛮」地抢锁,公平的时候是不会,但是非公平的时候是会的

ReentrantLock类的其中一个构造器提供了指定公平策略 / 非公平策略的功能,默认为非公平策略。

原文地址:https://www.cnblogs.com/zchok/p/13124418.html