【发布时间】:2026-01-15 21:15:01
【问题描述】:
我的 ReentrantLock 没有按我的预期工作。我希望下面代码的结果是随机锁定和解锁两个线程,但我得到的结果总是在一个线程上解锁。任何人都可以解释 ReentrantLock,我正在尝试了解它的公平政策(即新的 ReentrantLock(true))以及 tryLock() 方法。谢谢。
final ReentrantLock lock = new ReentrantLock(true);
new Thread(new Runnable() {
@Override
public void run() {
while (true)
try{
if (lock.tryLock(1, TimeUnit.SECONDS)) {
lock.lock();
System.out.println(Thread.currentThread().getName() + " locked");
lock.unlock();
} else {
System.out.println(Thread.currentThread().getName() + " not locked");
}
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while (true)
try{
if (lock.tryLock(1, TimeUnit.SECONDS)) {
lock.lock();
System.out.println(Thread.currentThread().getName() + " locked");
lock.unlock();
} else {
System.out.println(Thread.currentThread().getName() + " not locked");
}
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
控制台中的结果:
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
【问题讨论】:
标签: java reentrantlock