[英]How can I avoid unnecessary blocking in a multithreaded program?
给定2个方法methodB()
methodA()
和methodB()
,有没有办法使它们同步,从而使methodA()
不与其自身同步? 也就是说,许多线程可以同时执行methodA()
。
methodA()
应该阻塞,直到methodB()
未运行。 methodB()
应被阻塞,直到既不methodB()
或methodA()
正在运行。 您可以使用ReentrantReadWriteLock。
在methodA上锁定readLock,在methodB上锁定writeLock。 这将允许通过多个线程调用methodA,但不允许同时调用methodA和methodB(或methodB和methodB)。
更多背景信息:ReadLock允许并行读取。 WriteLock是排他性的,不允许再进行读取或写入。 通常,如果有一些线程正在读取并且某些线程要写入,则将进一步的读取请求排队,直到写入线程完成该工作为止。 这称为公平/不公平算法,必要时可以在构造函数中进行配置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.