互斥的java方法执行(不是全部)

时间:2016-01-31 12:54:10

标签: java concurrency thread-safety locking

我有一个包含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()完成。

真的不确定如何转换为代码。非常感谢

1 个答案:

答案 0 :(得分:7)

这是ReentrantReadWriteLock的好例子。它允许同时读取(B1B2B3),但写入(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();
}