如何在多线程程序中避免不必要的阻塞?

时间:2016-05-01 18:16:55

标签: java synchronization

有两种方法,methodA()methodB(),是否有办法同步这些方法,以便methodA()与自身同步?即许多线程可以同时执行methodA()

  • methodA()的来电应该会阻止,直到methodB()未运行。
  • methodB()的来电应该会阻止,直到methodB()methodA()都没有运行。

1 个答案:

答案 0 :(得分:2)

您可以使用ReentrantReadWriteLock。

在methodA中锁定readLock并在methodB锁定writeLock。这将允许多个线程调用methodA,但不能同时调用methodA和methodB(或methodB和methodB)。

更多背景: ReadLock允许并行读取。 WriteLock是独占的,不允许更多的读取或写入。通常,如果有一些线程正在读取并且某些线程想要写入,则进一步的读取请求将排队,直到写入线程执行该作业。它被称为公平/不公平算法,如果需要,可以在构造函数中进行配置。