众所周知,ReentrantLock根据构造方法参数的true和false,分为公平锁和非公平所。默认值是NonfairSync(非公平锁)。
运行一下代码
public class ReentrantLockDemo1 {
private static Lock lock = new ReentrantLock(false);
private static Object object = new Object();
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable(){
@Override
public void run() {
lock.lock();
lock.lock();
System.out.println("t1 == " + object.getClass());
lock.unlock();
lock.unlock();
}
});
Thread t2 = new Thread(new Runnable(){
@Override
public void run() {
lock.lock();
System.out.println("t2 == " + object.getClass());
// lock.unlock();
}
});
t1.start();
t2.start();
}
}
目前是非公平锁,运行结果有2种
t1 == class java.lang.Object
t2 == class java.lang.Object
第一种结果分析原因:t1线程第一次解锁之后,t1和t2线程共同抢占锁,但是t1顺利抢到,然后顺利解锁,之后t2顺利获得锁。
t2 == class java.lang.Object
第一种结果分析原因:t2线程直接抢到锁,t1永远也获得不到锁
上边是对ReentrantLock的简单实用。下边说下其中的原理。(待续。。。)