Smi*_*min 9 java multithreading thread-priority
我有一个运行多个Java线程的应用程序的问题.应用程序运行许多工作线程,这些线程在输入队列中连续查看,如果队列中有消息,则将它们拉出并处理它们.
在这些工作线程中,有另一个验证线程被安排在固定的时间段执行检查以查看主机(应用程序运行的主机)是否仍处于"良好状态"以运行应用程序.该线程更新一个AtomicBoolean值,该值在工作线程开始窥视之前由工作线程验证,以查看主机是否正常.
我的问题是,在高CPU负载的情况下,负责验证的线程将花费更长的时间,因为它必须与所有其他线程竞争.如果在AtomicBoolean一段时间后没有得到更新,它会自动设置为false,这会给我带来一个令人讨厌的瓶颈.
我最初的方法是增加验证线程的优先级,但深入挖掘它我发现这不是一个保证行为,算法不应该依赖线程优先级来正常运行.
有人有任何其他想法吗?谢谢!
更多线程并不意味着更好的性能。通常,如果您有双核,则 2 个线程可提供最佳性能,3 个或更多线程则开始变得更糟。四核应该最好处理 4 个线程,等等。所以要小心你使用的线程数量。
您可以在其他线程执行其工作后将其置于睡眠状态,并允许其他线程完成其部分工作。我相信 Thread.yield() 会暂停当前线程,为其他线程提供时间。
如果您希望线程连续运行,我建议创建两个主线程,线程 A 和 B。使用 A 作为验证线程,并从 B 创建其他线程。因此线程 A 获得了更多的执行时间。