0

私がする必要があるのは、プロデューサー/コンシューマー プログラムです。2 つのプロデューサー スレッドを実行する必要があります (1 つ目は 4 秒のブレークで AcionEvent を送信し続け、2 つ目は 10 秒のブレークで同じことを行います)。コンシューマ スレッドは、JTextArea を持つ JFrame である必要があります。プロデューサーによって作成されたイベントをキャッチするには、ActionPerformedListner を実装する必要があります。JTextAreaテキストをクリアする必要がある場合でも、最初にキャッチします。2 番目のイベントをキャッチするときに、テキストを入力する必要があります。ActionEvent をコンシューマ スレッドに送信する方法がわかりません。何か助けはありますか?

4

1 に答える 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 に答える