我们先创建一个lock对象
public static void main(String[] args) {
Lock lock = new ReentrantLock();
}
上图我们没有传入参数,它调用的默认构造方法如下, 可以看到不传参默认使用了非公平锁
public ReentrantLock() {
sync = new NonfairSync();
}
如果你传的参数为true
public static void main(String[] args) {
Lock lock = new ReentrantLock(true);
}
可以看到,代表开启了公平锁
public ReentrantLock(boolean fair) {
sync = fair ? new FairSync() : new NonfairSync();
}
公平锁
指多个线程按照申请锁的顺序来获取锁,类似于排队打饭,顺序不能乱
非公平锁
指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。
非公平锁在实际使用中更合理一些,lock和sychronized默认也都使用了非公平锁