複数の Java スレッドを実行するアプリケーションに少し問題があります。アプリケーションは、入力キューを継続的にピークする多数の作業スレッドを実行し、キューにメッセージがある場合はそれらを取り出して処理します。
これらの作業スレッドの中には、(アプリケーションが実行されている) ホストがまだアプリケーションを実行するのに「良好な状態」にあるかどうかを確認するためのチェックを定期的に実行する予定の別の検証スレッドがあります。このスレッドAtomicBoolean
は、ホストが正常かどうかを確認するためにピークを開始する前に、作業スレッドによって検証される値を更新します。
私の問題は、CPU 負荷が高い場合、検証を担当するスレッドが他のすべてのスレッドと競合する必要があるため、時間がかかることです。AtomicBoolean
一定期間が経過しても更新されない場合、自動的に false に設定され、厄介なボトルネックが発生します。
私の最初のアプローチは、検証スレッドの優先度を上げることでしたが、より深く掘り下げると、これは保証された動作ではなく、アルゴリズムが正しく機能するためにスレッドの優先度に依存するべきではないことがわかりました。
代替案はありますか?ありがとう!