0

我需要做的是一个生产者/消费者计划。我需要做一个 2 个生产者线程(第一个将继续发送具有 4 秒中断的 AcionEvent,第二个将在 10 秒中断时执行相同的操作)。消费者线程需要是带有 JTextArea 的 JFrame。我需要实现 ActionPerformedListner 来捕获生产者创建的事件。当我赶上第一时,即使我需要清除 JTextArea 文本。当我要捕捉第二个事件时,我需要用一些文本填充它。我不知道如何将 ActionEvent 发送到消费者线程。有什么帮助吗?

4

1 回答 1

1

没有那么难的伙伴,首先两个线程(生产者/消费者)都应该处于waiting状态,为此你需要两个对象,一个用于信号第一个线程,第二个用于第二个线程。
而且这里可能不需要生产者的两个线程。
像这样的东西。

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 回答