给定 2 个方法,methodA()
和 methodB()
,是否有办法同步这些方法,使得 methodA()
不存在? t 与自身同步?即许多线程可以同时执行 methodA()
。
- 对
methodA()
的调用应阻塞,直到methodB()
不运行。 - 对
methodB()
的调用应阻塞,直到methodB()
或methodA()
均未运行。
最佳答案
您可以使用ReentrantReadWriteLock。
在 methodA 中锁定 readLock,在 methodB 中锁定 writeLock。这将允许多个线程调用methodA,但不能同时调用methodA和methodB(或methodB和methodB)。
更多背景: ReadLock 允许并行读取。 WriteLock 是独占的,不允许再进行读或写。通常,如果有一些线程正在读取并且某些线程想要写入,则进一步的读取请求将排队,直到写入线程完成工作。这称为公平/不公平算法,如果需要可以在构造函数中配置。
关于java - 如何避免多线程程序中不必要的阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36970234/