我正在创建执行一些查询的服务器。最大线程数是用 Executors.newFixedThreadPool(2) 设置的,但是当我运行 3 个客户端时,所有客户端都会同时连接到该服务器。重要的是同时只有 2 个线程处于 Activity 状态。任何想法有什么问题吗?有部分服务器代码:
ServerSocket serverSocket = new ServerSocket(port);
ExecutorService server = Executors.newFixedThreadPool(2);
while (true) {
Socket clientSocket = serverSocket.accept();
Query query = new Query(clientSocket, allLogs);
server.submit(query);
}
当我运行 3 个客户端时,首先得到答案:服务器响应:pool-1-thread-1
,第二个服务器响应:pool-1-thread-2
和第三个服务器响应:pool-1-thread-1
。据我所知,第三个线程应该进入队列并等待一个线程完成。
最佳答案
当 ThreadPoolExecutor 配置了 CallerRunsPolicy 时,我看到过这种情况发生,这意味着当队列已满时,任务将在调用线程上执行。
关于java - 服务器执行的线程数超过指定数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60968312/