Java で記述された RMI クライアント アプリケーションがあり、サーバー アプリケーションに定期的に "stay alive" メッセージを送信する必要があります。これを別のハートビート スレッドとして実装しました。このスレッドは、Stay Alive メッセージをサーバーに送信し、Thread.sleep() を使用して 15 秒間スリープします。
スレッドは高優先度に設定されています。
Thread heartbeatThread = new Thread(new HeartbeatRunnable(server));
heartbeatThread.setPriority(Thread.MAX_PRIORITY);
heartbeatThread.start();
ただし、クライアントが実行されているボックスが大量の CPU を使用している場合、ハートビートが欠落していることがわかります。これにより、サーバーはクライアント アプリケーションが停止したと見なします。
メインスレッドに Thread.yield() 呼び出しを追加しましたが、これで問題が解決したわけではありません。
アプリケーションの実行中にハートビートが時間どおりに送信されることを保証する方法はありますか?