开发者社区> 问答> 正文

关于java nio 的问题 400 请求报错 

      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 执行器被放到线程池,由线程池开启线程去执行读写任务,可是我发出一次请求后,执行任务读的线程还没执行完,步骤一又执行了,然后步骤二又进来了,然后线程池又开启新的任务,但是我并没有发出新的请求,步骤二能够进来是因为第一个任务的读的代码还没执行完。也就是说我发一次请求,会产生多个任务,怎么解决?

展开
收起
kun坤 2020-05-29 10:55:16 464 0
1 条回答
写回答
取消 提交回答
  • 外面套个if(key.isValid())

    2020-05-29 11:58:44
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载