互斥java方法执行(并非全部)
我有一个java类,包含4种方法:互斥java方法执行(并非全部),java,concurrency,thread-safety,locking,Java,Concurrency,Thread Safety,Locking,我有一个java类,包含4种方法: public void method_A() { ... } public void method_B1() { ... } public void method_B2() { ... } public void method_B3() { ... } 这个类的实例被许多对调用方法B1、B2和B3感兴趣的多线程使用。让这些人同时执行是绝对好的 但是,偶尔会在内部调用方法_A(),此时不应调用其他3个方法。当方法_A()运
public void method_A() { ... }
public void method_B1() { ... }
public void method_B2() { ... }
public void method_B3() { ... }
这个类的实例被许多对调用方法B1、B2和B3感兴趣的多线程使用。让这些人同时执行是绝对好的
但是,偶尔会在内部调用方法_A(),此时不应调用其他3个方法。当方法_A()运行时,不应该运行其他方法,它们应该使用某种锁等待,直到方法_A()完成
真的不知道该如何翻译成代码。非常感谢这是一个很好的例子。它允许同时读取(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();
}
谢谢假设methodB*()能够调用methodA()吗?(没有其他方法B*()能够在A正在进行时运行)不幸的是,您无法将锁从读升级到写-您必须首先释放读锁(这可能允许其他线程干预)。有一个执行