执行器服务工作程序没有在单独的线程中运行



我使用newFixedThreadPool同时向服务器套接字提供传入请求。由于某些原因,为客户端提供服务的工作类没有在单独的线程中运行。当我向套接字发送多个请求时,请求会按顺序提供,而不是像应该的那样同时提供。如果有什么不同的话,我正在运行OpenJDK 1.8.0_77。

这是我主要课程的节选:

    ExecutorService executorService = Executors.newFixedThreadPool(100);
    ServerSocket serverSocket = new ServerSocket(5656);
    while(true) {
        Socket socket = serverSocket.accept();
        executorService.execute(new ConnectionHandler(socket));
    }

这是我的工人阶级:

    public class ConnectionHandler implements Runnable {
    private Socket socket;
    public ConnectionHandler(Socket socket) {
        this.socket = socket;
    }
    public void run() {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }
        BufferedReader reader = null;
        PrintWriter writer = null;
        try {
        reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        writer = new PrintWriter(socket.getOutputStream(), true);
        while(true) {
            String line = reader.readLine();
            if(line == null) break;
            writer.println("Echo: " + line);
        }
        } catch (IOException e) {
        throw new RuntimeException(e);
        } finally {
        try {
            if(reader != null) reader.close();
            if(writer != null) writer.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        }
    }
    }

对不起,我不擅长电脑。

问题是,我在一个循环中将许多消息回显到套接字,但echo命令按顺序发送消息,并等待每条消息完成后再发送下一条消息。

问题是这个调用:

executorService.execute(new ConnectionHandler(socket));

execute方法可以强制调用线程阻塞,直到任务完成,甚至让调用线程执行实际工作。相反,这样做:

executorService.submit(new ConnectionHandler(socket));

这将使用池中的线程异步运行任务。

相关内容

  • 没有找到相关文章

最新更新