java - 服务器执行的线程数超过指定数量

标签 java multithreading java-threads java-server

我正在创建执行一些查询的服务器。最大线程数是用 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/

相关文章:

.Net Thread vs ThreadPool vs SerialPort 通信任务

java - 错误: java. lang.OutOfMemoryError:无法在循环中创建新的 native 线程

java - 通过清理杀死一个可运行的 jar ?

Java - 如何在运行 readLine 命令之前检查 BufferedReader 是否包含换行符

java - 从命令行运行 jar 文件时设置目录路径

c# - 实现实时 1 毫秒精确事件而不受线程调度的影响

java - 在对象上同步似乎没有同步

java - 使线程终止并编程结束执行时出现问题

java - Bukkit - 插件未加载 - 主要错误

java - 为什么我可以生成超出最大值的字符?