Java のスレッドでビジー ループを解消する方法を見つけようとしています。スレッドは、Listener クラスからのコールバックを待つだけです。スレッド クラスは次のようになります。
class MyThread implements Runnable, MessageListener{
private Listen Listener;
public MyThread(){
Listener = new Listener(this);
}
public void run(){
while(true){}
}
public void messageReceived(Message m){
//do stuff
}
}
このコードをできるだけシンプルにしようとしました。これは、Listener がシリアル ポートから何らかのデータを受信するのを待っており、メッセージが受信されるとスレッドが何らかの処理を行うというものです。Message の BlockingQueue などの同期変数を使用したいのですが、Listener コードを変更できません。もちろん、問題は実行ループがプロセッサ サイクルを消費することです。私の質問:
実行ループで待機またはスリープしても、関数呼び出しは期待どおりに機能しますか? (これが 100% の確率で機能することをテストする方法がわかりません)。
このループを完全に回避するためのより良い方法はありますか?