公平锁:每个线程获取锁的顺序是按照线程访问锁的先后顺序获取,最前面的线程总是先获取到锁。
非公平锁:每个线程获取锁的顺序是随机的,并不遵循先来先得的规则,线程会竞争获取锁。
为了更高的吞吐量,非公平锁比较合适,因为节约很多线程切换时间,吞吐量自然就上去了;否则那就使用公平锁,大家公平使用。
ReentrantLock默认是非公平锁。
public ReentrantLock() { sync = new NonfairSync(); } public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync(); }