在thread2进入method2之后,运行thread1以完成method1的信号

时间:2013-09-20 10:40:30

标签: java multithreading locking

我有两种方法需要运行如下。

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中运行线程。

1 个答案:

答案 0 :(得分:2)

这是ReadWriteLock的经典用法。

请参阅Java Concurrency with ReadWriteLock

  

读锁可以由多个读取器线程同时保持,   只要没有作家。 写锁定是独占的

因此,当您在method2的#1中请求写入锁定时,它会等到所有读取锁定被释放method1之前释放所有读取锁定的时间,然后再进行锁定并返回。

采用写锁定基本上执行method2的#1和#2。