public static void main(String[] args) {
Lock rl = new ReentrantLock();
try {
rl.lock();
System.out.println("--1" + rl);
rl.lockInterruptibly();
System.out.println("--2" + rl);
rl.lock();
// rl.lockInterruptibly();
synchronized (rl) {
System.out.println("--3" + rl);
}
System.out.println("--4" + rl);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// 解锁
// rl.unlock();
// rl.unlock();
}
}
}
}
把unlock注释掉,输出lock的状态,发现被main线程解锁了,
为什么main线程会解锁
根本原因是ReentrantLock是可重入锁,你这里只用了一个线程,这个锁一直都被main线程使用,所以你try里面两行lock操作都是正确的。
你可以换种测试方法,写一个ReentrantLock锁,然后在自定义线程中使用该锁进行加锁、解锁操作。而且不要在同一个线程中未unlock就再次lock。
结果肯定会不一样的。
因为main是主线程
你用的是可重入锁,main线程可以重复使用这个锁。