我有一个包含4种方法的java类:
public void method_A() { ... }
public void method_B1() { ... }
public void method_B2() { ... }
public void method_B3() { ... }
许多有兴趣调用方法B1 B2和B3的多个线程使用此类的实例。同时执行这些是绝对正确的
然而,在内部调用method_A(),并且当时不应该调用另外3个。当method_A()运行时,不应该运行其他方法,它们应该等待某种锁定,直到method_A()完成。
真的不确定如何转换为代码。非常感谢
答案 0 :(得分:7)
这是ReentrantReadWriteLock的好例子。它允许同时读取(B1
,B2
,B3
),但写入(A
)会阻止读取和写入。
你应该添加:
private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
在B*
方法中:
lock.readLock().lock();
try {
// method code
} finally {
lock.readLock().unlock();
}
在A
:
lock.writeLock().lock();
try {
// method code
} finally {
lock.writeLock().unlock();
}