有两种方法,methodA()
和methodB()
,是否有办法同步这些方法,以便methodA()
与自身同步?即许多线程可以同时执行methodA()
。
methodA()
的来电应该会阻止,直到methodB()
未运行。methodB()
的来电应该会阻止,直到methodB()
或methodA()
都没有运行。答案 0 :(得分:2)
您可以使用ReentrantReadWriteLock。
在methodA中锁定readLock并在methodB锁定writeLock。这将允许多个线程调用methodA,但不能同时调用methodA和methodB(或methodB和methodB)。
更多背景: ReadLock允许并行读取。 WriteLock是独占的,不允许更多的读取或写入。通常,如果有一些线程正在读取并且某些线程想要写入,则进一步的读取请求将排队,直到写入线程执行该作业。它被称为公平/不公平算法,如果需要,可以在构造函数中进行配置。