互斥java方法执行(并非全部)

互斥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()运

我有一个java类,包含4种方法:

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正在进行时运行)不幸的是,您无法将锁从读升级到写-您必须首先释放读锁(这可能允许其他线程干预)。有一个执行