需求
FooService:
- methodA
- methodB
- methodC
A 与 B C是互斥的 即不能同时操作 但B与C是可以同时操作的
显然synchronized
不支持 因为都是互斥关系了
- synchronized void methodA
- synchronized void methodB
- synchronized void methodC
一种解决方法
采用读写锁 如下所示
private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
public void methodA() {
rwl.writeLock().lock();
// do something here
rwl.writeLock().unlock();
}
public void methodB() {
rwl.readLock().lock();
// do something here
rwl.readLock().unlock();
}
不知道Java中还没有其他方案可以满足上述需求的 即一个方法与其他方法是互斥的 但是其他方法是可以同时操作的
还是只能使用读写锁