我对运行多个 Java 线程的应用程序有一点问题。该应用程序运行许多工作线程,这些线程不断地查看输入队列,如果队列中有消息,它们会将它们拉出并处理它们。
在这些工作线程中,有另一个验证线程计划在固定周期执行检查以查看主机(运行应用程序的主机)是否仍处于“良好状态”以运行应用程序。该线程更新一个AtomicBoolean
值,该值在工作线程开始查看主机是否正常之前由工作线程验证。
我的问题是,在 CPU 负载较高的情况下,负责验证的线程将花费更长的时间,因为它必须与所有其他线程竞争。如果在AtomicBoolean
一段时间后没有更新,它会自动设置为 false,给我造成一个令人讨厌的瓶颈。
我最初的方法是提高验证线程的优先级,但深入研究后我发现这不是保证行为,算法不应该依赖线程优先级才能正常工作。
有人有任何替代想法吗?谢谢!