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

Mik*_*elW 2 java concurrency locking thread-safety

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

public void method_A() {   ...   }

public void method_B1() {   ...   }

public void method_B2() {   ...   }

public void method_B3() {   ...   }
Run Code Online (Sandbox Code Playgroud)

许多多个线程都使用此类的实例来调用方法B1 B2和B3.那些并发执行是绝对正常的

但是,在内部调用method_A()时,应该永远不会调用另外3个.当method_A()运行时,不应该运行其他方法,它们应该等待某种锁定,直到method_A()完成.

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

use*_*125 7

这是ReentrantReadWriteLock的一个很好的例子.它允许同时读取(B1,B2,B3),但写(A)块读取和写入.

你应该添加:

private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
Run Code Online (Sandbox Code Playgroud)

并在B*方法中:

lock.readLock().lock();
try {        
    // method code
} finally {
    lock.readLock().unlock();
}
Run Code Online (Sandbox Code Playgroud)

A:

lock.writeLock().lock();
try {
    // method code
} finally {
    lock.writeLock().unlock();
}
Run Code Online (Sandbox Code Playgroud)