while (acceptKey.selector().select() > 0 )//步骤一
{
Set readyKeys = selector.selectedKeys();
Iterator it = readyKeys.iterator();
while (it.hasNext()) {
SelectionKey key = (SelectionKey)it.next();
it.remove();
if (key.isAcceptable()) {
logger.info("Key is Acceptable");
ServerSocketChannel ssc = (ServerSocketChannel) key.channel();
socket = (SocketChannel) ssc.accept();
socket.configureBlocking(false);
socket.register(selector,SelectionKey.OP_READ|SelectionKey.OP_WRITE);
}
if(key.isReadable()){ //步骤二
Executor executor = new Executor(key);
pool.addTask(executor);//步骤三
}
}
}
问题描述:当请求过来的时候,Executor 执行器被放到线程池,由线程池开启线程去执行读写任务,可是我发出一次请求后,执行任务读的线程还没执行完,步骤一又执行了,然后步骤二又进来了,然后线程池又开启新的任务,但是我并没有发出新的请求,步骤二能够进来是因为第一个任务的读的代码还没执行完。也就是说我发一次请求,会产生多个任务,怎么解决?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。