我有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/

10-10 03:50