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()完成.
真的不确定如何转换为代码.非常感谢
这是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)