我有 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
}
最简单的解决方案是同步方法 1 和方法 2。另一个需要考虑的点是method1可以被多个线程(>10)调用并且是常见操作,而method2很少被调用。因此,同步方法1将严重阻碍多处理能力。
我探索了使用 ReadWriteLock 的可能性,在 method1 中使用 readLock,在 method2 中使用 writeLock。但这对我在方法2中的#1没有帮助,即。在方法 2 中获取 writeLock 后,我希望方法 1 中运行的线程在继续方法 2 之前完成。
最佳答案
这是ReadWriteLock
的经典用法。
参见Java Concurrency with ReadWriteLock
The read lock may be held simultaneously by multiple reader threads, so long as there are no writers. The write lock is exclusive.
因此,当您在 method2
的 #1 中请求写入锁定时,它将等到调用 method1
的任何人都释放了所有读取锁定后才获取锁定并返回。
获取写锁本质上执行方法2
的#1和#2。
关于java - 在线程 2 进入方法 2 后,向运行线程 1 发出信号以完成方法 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18914738/