我需要做的是生产者/消费者计划。我需要做2个生产者线程(第1个将继续发送一个具有4秒休息的AcionEvent,第2个将执行相同的10秒休息)。消费者线程需要是带有JTextArea的JFrame。我需要实现ActionPerformedListner来捕获生成器创建的事件。什么时候我会抓住第一,甚至我需要清除JTextArea文本。当我将抓住第二个事件时,我需要填写一些文字。我不知道如何将ActionEvent发送到消费者线程。有什么帮助吗?
答案 0 :(得分: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线程中通知生产者线程。