我有两种方法需要运行如下。
method1 {
1. run logic and insert into table1
}
method2 {
1. wait till other threads finish method1
2. block future threads from starting method1
3. update table1
}
最简单的解决方案是同步method1和method2。另一个考虑因素是method1可以由多个线程(> 10)调用并且是常见操作,而method2很少被调用。因此,同步方法1将严重妨碍多处理能力。
我探索了使用ReadWriteLock的可能性,方法2中的readLock和method2中的writeLock。但这对方法2中的#1没有帮助,即。在method2中获取writeLock之后,我希望在继续执行method2之前在method1中运行线程。
答案 0 :(得分:2)
这是ReadWriteLock
的经典用法。
请参阅Java Concurrency with ReadWriteLock
读锁可以由多个读取器线程同时保持, 只要没有作家。 写锁定是独占的。
因此,当您在method2
的#1中请求写入锁定时,它会等到所有读取锁定被释放method1
之前释放所有读取锁定的时间,然后再进行锁定并返回。
采用写锁定基本上执行method2
的#1和#2。