我有2种方法需要如下功能。
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的可能性,其中method1中的readLock和method2中的writeLock。但这对方法2中的#1毫无帮助。在method2中获得writeLock之后,我希望在继续method2之前完成method1中的运行线程。
最佳答案
这是ReadWriteLock
的经典用法。
见Java Concurrency with ReadWriteLock
读取锁可以由多个读取器线程同时保持,
只要没有作家。写锁是排他的。
因此,当您在method2
的#1中请求写锁定时,它将等待直到调用method1
的任何人释放了所有读锁定的时间,然后再取回并返回。
进行写锁定实际上执行method2
的#1和#2。
关于java - 在线程2进入method2之后,发出信号通知正在运行线程1以完成method1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18914738/