我有一个由2个字段和一个方法组成的测试类。
private final Lock firstLock = new ReentrantLock(true);
private final Lock secondLock = new ReentrantLock(true);
public void method() {
firstLock.lock();
try {
// data transfer to the server
} finally {
firstLock.unlock();
}
// race condition
secondLock.lock();
try {
// read response from server
} finally {
secondLock.unlock();
}
}
我有两个问题:
secondLock.lock()
之前调用firstLock.unlock()
,因为我的任务是创建独立的锁(第一个锁也将在另一个方法中使用,不应该依赖于第二个锁)。 / LI>
醇>
加
public void method2() {
firstLock.lock();
try {
// data transfer to the server (without waiting for a response from it)
} finally {
firstLock.unlock();
}
}
答案 0 :(得分:0)
是。您已经标记了潜在的"竞争条件"地点。 如果多个线程将尝试访问注释代码部分中的某些共享资源,则可能出现这种情况。
使用两把锁
是不可能的我需要获得第一个锁的线程是第一个获得第二个锁的线程
换句话说,您想要创建两个依赖锁,但是:
我的任务是创建独立锁