当前位置: 首页 > 知识库问答 >
问题:

执行器-需要LinkedBlockingQueue

吕亮
2023-03-14

当我们讨论使用Executors服务处理异步事件时,为什么创建一个新的固定线程池涉及到使用LinkedBlockingQueue?到达的事件完全不依赖,所以为什么要使用队列,因为使用者线程仍然会涉及take Lock的争用?为什么Executors类没有一些混合数据结构(例如并发映射实现),在大多数情况下不需要带锁?

共有1个答案

薛经纶
2023-03-14

线程池执行器与blockingQueue一起工作是有充分理由的(顺便说一下,您不必使用LinkedBlockingQueue实现,您可以使用blockingQueue的不同实现)。队列应该阻塞,以便在没有任务要执行时挂起辅助线程。这种阻塞是使用wait on条件变量完成的,因此当队列为空时,等待工作线程不会消耗任何CPU资源。

如果在线程池中使用非阻塞队列,那么工作线程将如何轮询要执行的任务?它们将不得不实现某种轮询,这是不必要的CPU资源浪费(它将“忙着等待”)。

更新:

这里有很大的讨论--我想这与你的问题有关。

 类似资料:
  • 我用的是linux box。 我无法使用IPv6 FTP服务器执行任何操作。我能够使用IPV6 FTP服务器进行连接。但我什么时候做任何操作(比如ls、get、put…)下面是例外情况(用粗体突出显示)。 [root@SKP-vlnx~]#ftp aa01:9:1::22:56ff:231:4b连接到aa01:9:1::22:56ff:231:4b(aa01:9:1::22:56ff:231:4b

  • 我正在尝试使用嵌入式野蝇运行我们的JPA单元测试。到目前为止,当我进行清洁时,我得到了以下步骤的工作 嵌入式wildfly将部署在项目的/target文件夹中 MSSQL数据库驱动程序将被部署并注册为驱动程序 arquillian创建一个包含所有必需依赖项的.war文件 arquillian将我的项目的.war部署到嵌入式wildfly,并在嵌入式wildfry上开始单元测试 现在我的问题是:当我

  • 我知道要冬眠。我有一个sql语句 我尝试用createCriteria和HQL实现它。 HQL: 问题是,此HQL的执行时间延长了10倍。并执行许多不必要的查询。我尝试使用注释字符串进行转换,它有了一些改进,但仍然比createCriteria查询长5倍,此外,我无法进行此转换 <代码>列表 版本数据防御

  • 我的一个服务/执行器/健康endpoint花费了更多时间(大约9秒)。我正在使用以下依赖项,如何调试? 使用的Spring引导版本:2.0.3.RELEASE 谢谢,哈里

  • 我已经使用testng并行测试用例执行设置,但我只需要执行一次设置方法。 BeforeClass和BeforeMethod也会针对单个线程执行。但我需要在所有线程之前执行一次方法。 如何通过TestNG设置实现这一点? 测试NG。xml

  • 问题内容: 有没有办法知道在Java中执行一个循环要花多少秒? 例如: 它不必精确到100%,而只是想知道要花费多长时间。里面的算法是一种写入.txt文件的密钥生成器。我希望它花费几分钟,因此对于我的第一次测试,我想计算秒数。 问题答案: 用Java编写微基准测试时需要非常小心。例如: 如果JIT编译器可以弄清楚循环体不影响代码结果,则可以对其进行优化。例如: 可能很快就会“运行”。 JIT编译后