请bang解释下书中代码,如下线程运行后怎么解,会不会互相反复调用?一直不明白,帮帮我呀!

public void run() { // normally in a new Thread
try {
while (!Thread.interrupted()) {
selector.select();
Set selected = selector.selectedKeys();
Iterator it = selected.iterator();
while (it.hasNext())
dispatch((SelectionKey)(it.next());
selected.clear();
}
} catch (IOException ex) { /* ... */ }
}
void dispatch(SelectionKey k) {
Runnable r = (Runnable)(k.attachment());
if (r != null)
r.run();
}

就是run调用dispath后,dispath又调用run,这种方法的意图是什么呀!请说下!!!!!!

这里r.run();是一个新线程的run方法,不是上面那个线程了

我知道是一个新的run线程,可它的方法还是上面的那个public void run()
的,新的run满足条件又运行下面的dispatch();dispatch又产生新的run线程.可是这样怎么能运行到以后的Handle()或Accept();
请详细说下!

>我知道是一个新的run线程,可它的方法还是上面的那个public void run()

这是一个新的线程,所有的线程共同特点都是有run()方法,所以你不能因为上面那个有run()方法,就以为,我说的新的线程就是上面那个线程,是一个新的应用线程类新的实例,不是同一个线程类的新的实例。

注意区别,饶舌....:)

是否这样理解:在这个TCPReactor中,run()用于开个单线程一者守侯对注册key的选择,对选出的key,用dispatch的run()再进行选择是读还是写,可这个dispatch的run()是在那里实现的呢?在你的3个文件中(TCPReactor,Accept,TCPHandle)我看都没有,还是需要自己实现呢?该在这三个文件中的哪个中实现?还是已经实现了,我找不到而已,你帮我指出在那实现的.

是不是这样的,dispatch中attachment返回的对象将调用其自身的run的

我又想了一遍是这样吗:

TCPReactor中run()只产生一个单线程监控客户端key,dispatch的run()产生另一个线程,调用Acceptor,TCPHandler,虽然dispatch用的还是TCPReactor的run()方法,但却是另一个效果,有一堆的key(被先前的TCPReactor选出的)被dispatch的run()再产生出相应个数key的线程,每个key都有一个channel,都有一个selector在监控,其中的key根据标记选择对应方法,完成各自线程并关闭.我把这个dispatch的run处理的key看作一个小类的线程群B,而先前的TCPReactor的run看作一个大类的线程A,A只有一个且一直等待,不停等待事件,不停产生线程群B.

我这几天想了好多遍,每次问你,都几个字敷衍我,而且这里其他人也不回答,冷呀!这次你多说几个字,说详细点好不好,我可是你的读者,你别让我再睡不着觉了!