日期:2014-05-20  浏览次数:20725 次

在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()