gpt4 book ai didi

CPU 负载中的 Java 多线程

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:25:48 25 4
gpt4 key购买 nike

我对运行多个 Java 线程的应用程序有点问题。该应用程序运行多个工作线程,这些线程持续查看输入队列,如果队列中有消息,它们就会将它们拉出并进行处理。

在这些工作线程中,有另一个验证线程计划在固定时间执行检查以查看主机(运行应用程序的主机)是否仍处于运行应用程序的“良好状态”。此线程更新一个 AtomicBoolean 值,该值又由工作线程在开始查看主机是否正常之前进行验证。

我的问题是,在 CPU 负载较高的情况下,负责验证的线程将花费更长的时间,因为它必须与所有其他线程竞争。如果 AtomicBoolean 在一定时间后没有得到更新,它会自动设置为 false,给我带来严重的瓶颈。

我最初的方法是增加验证线程的优先级,但深入研究后我发现这不是一个有保证的行为,算法不应该依赖线程优先级来正常运行。

有人有其他想法吗?谢谢!

最佳答案

与其查看常规队列数据结构,不如使用 java.util.concurrent 包的 LinkedBlockingQueue。

您可以做的是,运行一个线程池(您可以使用执行器服务的固定线程池,即您选择的多个工作线程)并执行 LinkedBlockingQueue.take()。

如果消息到达队列,它会被馈送到其中一个等待线程(是的,take 会阻塞线程,直到有东西可以被馈送)。

Java API Reference for Linked Blocking Queue's take method

HTH.

关于CPU 负载中的 Java 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15091434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com