【发布时间】:2013-02-26 14:21:22
【问题描述】:
运行多个 Java 线程的应用程序有点问题。 应用程序运行多个工作线程,这些线程不断查看输入队列,如果队列中有消息,它们会将它们拉出并处理它们。
在这些工作线程中,还有另一个验证线程计划在固定时间执行检查,以查看主机(运行应用程序的主机)是否仍处于运行应用程序的“良好状态”。该线程更新AtomicBoolean 值,然后工作线程在开始查看主机是否正常之前对其进行验证。
我的问题是,在 CPU 负载较高的情况下,负责验证的线程将花费更长的时间,因为它必须与所有其他线程竞争。如果AtomicBoolean 在一段时间后没有得到更新,它会自动设置为 false,从而给我造成严重的瓶颈。
我最初的方法是提高验证线程的优先级,但深入研究后我发现这不是保证行为,算法不应依赖线程优先级才能正常运行。
有人有其他想法吗?谢谢!
【问题讨论】:
-
通常,优先级不应影响正常运行,但这似乎是一个调整问题。假设验证线程的 CPU 负载较低,并且工作人员需要更多的 CPU,则给他们较低的优先级。另外,请确保您的 atomic 的超时时间没有设置得太低。
-
再次:向我们展示您的
verification thread的源代码。
标签: java multithreading thread-priority