可重入锁
synchronized
ReentrantLock
跟踪源码state变化
首先新建一个类,写上下面方法,
public class LockTest {
//非公平、公平锁
private ReentrantLock noFairLock = new ReentrantLock(false);
private ReentrantLock fairLock = new ReentrantLock(true);
/**
*
* 非公平锁
*/
public void testNoFairLock() {
noFairLock.lock();
try {
SleepUtils.sleepSeconds(1);
System.out.println(Thread.currentThread().getName() + "正在使用【非公平锁】");
System.out.println("非公平锁打开了家里的大门....");
entryRoomsNoFair();
} finally {
noFairLock.unlock();
}
}
public void entryRoomsNoFair() {
noFairLock.lock();
try {
System.out.println("非公平锁打开大门后走进他的房间...");
sleepNoFair();
} finally {
noFairLock.unlock();
}
}
public void sleepNoFair() {
noFairLock.lock();
try {
System.out.println("非公平锁进入房间后开始睡觉...");
} finally {
noFairLock.unlock();
}
}
//
@Test
public void testNoFair() {
testNoFairLock();
}
}