私がする必要があるのは、プロデューサー/コンシューマー プログラムです。2 つのプロデューサー スレッドを実行する必要があります (1 つ目は 4 秒のブレークで AcionEvent を送信し続け、2 つ目は 10 秒のブレークで同じことを行います)。コンシューマ スレッドは、JTextArea を持つ JFrame である必要があります。プロデューサーによって作成されたイベントをキャッチするには、ActionPerformedListner を実装する必要があります。JTextAreaテキストをクリアする必要がある場合でも、最初にキャッチします。2 番目のイベントをキャッチするときに、テキストを入力する必要があります。ActionEvent をコンシューマ スレッドに送信する方法がわかりません。何か助けはありますか?
user2410128
質問する
70 次
1 に答える
1
最初に両方のスレッド (プロデューサー/コンシューマー) をwaiting
状態にする必要があります。これを行うには、2 つのオブジェクトが必要です。
ここでは、プロデューサ用の 2 つのスレッドは必要ない場合があることに注意してください。
このようなもの。
final Object producer=new Object();//used for signaling the thread about the incoming event
final Object signalConsumer;//used for signaling consumer thread.
void run(){
while(true){//until end of the system life cycle, use a flag, or set the thread daemon
try{
synchronized(producer){producer.wait();}
Thread.sleep(4000);//sleep for 4 s
synchronized(consumer){signalConsumer.notify();}//send the first signal to consumer to clear the textbox
Thread.sleep(10000);//sleep for 10 seconds
synchronized(consumer){signalConsumer.notify();}//send the second signal to consumer for filling the textbox
}catch(Exception ex){}
}
}
そして消費者スレッド。final Object signalConsumer=new Object();// プロデューサー スレッドへの参照を渡します。
void run(){
while(true){
try{
synchronized(signalConsumer){signalConsumer.wait();}//waiting for the first signal
//clearing textbox, etc...
synchronized(signalConsumer){signalConsumer.wait();}//waiting for the second signal
//filling the textbox, etc...
}catch(Exception ex){}
}
}
イベントをキャッチするUIスレッドでは、プロデューサースレッドに通知するだけです。
于 2013-11-03T20:17:16.060 に答える