import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
public class ReentrantLockTest {
public static ReentrantLock reenT = new ReentrantLock();//参数默认false,不公平锁
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
reenT.lock();
System.out.println(Thread.currentThread().getName() + " 获得了锁");
reenT.lock();
System.out.println(Thread.currentThread().getName() + " 获得了锁");
reenT.unlock();
System.out.println(Thread.currentThread().getName() + " 释放了锁");
});
Thread t2 = new Thread(() -> {
reenT.lock();
System.out.println(Thread.currentThread().getName() + " 获得了锁");
reenT.unlock();
});
Thread t3 = new Thread(() -> {
reenT.lock();
reenT.lock();
});
t1.start();
t2.start();
Thread.sleep(2000L);
System.out.println("线程t1: " + t1.getState().toString());
System.out.println("线程t2: " + t2.getState().toString());
}
}
>
Thread-0 获得了锁
Thread-0 获得了锁
Thread-0 释放了锁
线程t1: TERMINATED
线程t2: WAITING
上述代码中,t1调用了2次lock(), 因为是可重入锁。 但是只调用了一次unlock()。t1执行完后进入TERMINATED状态,最后没有释放锁。 所以t2一直处于WAITING状态。
倘若t1调用2次unlock(),那么t2就有机会获得锁了。