在NIO中,如何同步接收线程池中返回的处理结果,同时做到不阻塞程序?
有一个NIO程序,把从客户端接收到的信息交给线程池处理,同时要同步接收返回的信息,
如果线程池的处理时间很长,程序在等待处理结果。岂不是整个程序都阻塞了,大家看下下面的处理是否合理。
[code=Java]
ExecutorService exec = Executors.newFixedThreadPool(2)
if (key.isReadable()) { //
String task = "get from client request ";
selKey = channel.register(selector,
SelectionKey.OP_WRITE);
selKey.attach(new Handle(task));
} else if (key.isWritable()) {
Handle handle = (HandleClient) key.attachment();
Future submit = exec.submit(handle); //如果handel的执行时间很长,要1分钟才返回,程序会停住
channel.write( "write result "+submit.toString());
}
[/code]
------解决方案--------------------
future.cancel()