线程a是作为事件源,那么线程a这个类就必须提供一个可以增加监听器的方法,就像GUI编程中的addActionListener这个样的方法。线程a这个类里面是有一个专门存放监听器的一个容器,例如是list。然后你 增加监听器的方法就是把监听器放进这个容器里面。你用一个监听器去监听一个事件的发生,就可以在线程a这个类中,写一个产生事件的一段代码,然后每当产生一个事件之后,去遍历list,去调用监听器的对于这个事件的处理方法,这样子就可以了。这应该就是java中的事件模式。
这其中的逻辑就是First做了一步后,触发事件,通过接口MyListener向事件处理单元Control传播,Control随即调用Second继续。
import java.awt.event.*;
import java.util.*;
interface MyListener
{
void begin(First first);
}
class Control implements MyListener
{ First first; public void newGame(First first)
{
this.first = first;
first.start();
}
@Override public void begin(First firstone) {
System.out.println("second go on");
}
}
class First
{ private Set<MyListener>listeners = new HashSet<MyListener>();
public void action() {
System.out.println("First begin");
}
private class FirstThread implements Runnable
{
public void run() {
while (true)
{
action();
for (MyListener sl : listeners)
{ sl.begin(First.this);
}
try { Thread.sleep(1000); }
catch (InterruptedException e)
{ e.printStackTrace(); }
} }
}
public void start()
{
new Thread(new FirstThread()).start();
}
public void addMyListener(MyListener ml)
{
if (ml != null)
{ listeners.add(ml);
}
}
}
public class TestEvent
{ public static void main(String args[]) {
First first = new First();
Control c = new Control();
first.addMyListener(c);
c.newGame(first);
}
}
运行结果
First begin
second go on
First begin
second go on
First begin
second go on
First begin
second go on