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

标签 java synchronization

给定 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/

相关文章:

java - 什么会导致 TCP/IP 在不断开连接的情况下丢弃数据包?

java - BigIP - Tomcat 8 连接在从 tomcat 6 升级时被拒绝

windows - Vagrant:将centos文件夹同步到windows

java - EJB 和同步

java - 线程安全映射 : improve performance

java - 顺序处理相似字符串的线程

java - Web 服务器无法启动。 8080端口已被使用

java - 我不确定应该使用导入的 IO 类中的哪个输入

java - mongoDB中按ID分组

c++ - boost::interprocess::named_mutex 是否需要存储在共享内存中?