Java NIO 线程 的一个问题

05-08-07 promiscuous
对于下面JavaNIO的代码:
while(true){
int n = selector.select();
if(n == 0) continue;
......
if(key.isacceptable){
....
}
if(key.isReadable()){
processdata p = new processdata(key);
Thread t = new Thread(p);
t.start();
}
总是出现下面的问题,就是在线程t运行到一半的时候,由于key还没有读完,它还是readable的,而此时外部的死循环继续执行。由于readable,会出现同一个客户端发来的消息由多个线程同时处理的情形,应该如何解决,谢谢!!

roastcoffee
2005-09-01 11:52
你需要用类似队列的对象把接收到的请求加进去,建议也写成thread来完成这个工作。这篇文章不知道你看过没有,里面对构建nio的应用结构叙述的很透彻http://www.onjava.com/pub/a/onjava/2004/09/01/nio.html?page=1
也有范例。

lyerliu
2005-12-09 17:40
应该加上这段代码,这样处理

Set keys = selector.selectedKeys();
Iterator it = keys.iterator();
while (it.hasNext()) {
SelectionKey key = (SelectionKey)it.next();
// What kind of activity is it?
if ((key.readyOps() & SelectionKey.OP_ACCEPT) ==
SelectionKey.OP_ACCEPT) {
}

…………
}

欢迎进入17037443 网络编程群讨论