【发布时间】:2019-03-16 21:08:08
【问题描述】:
我有六个向外部服务器发送数据的进程。每个进程运行多个“传输”线程以提高性能和并行性(延迟、大文件等)。我每个进程有一个执行程序,每个进程最多 5 个线程。
现在,由于外部服务器仅支持 20 个线程,而我的进程尝试运行总共 30 个线程(6 个进程 x 每个 5 个线程),一些线程崩溃了。我明白了。
有没有办法在 Java 中创建一个“大线程池”(有 20 个线程)来将所有进程的总传输线程限制为最多 20 个?
另外,我正在考虑为所有进程创建一个单个执行器,但是一个进程可能会占用所有线程,而让其他进程处于饥饿状态。
【问题讨论】:
-
进程,你的意思是每个都运行在自己的JVM中吗?
-
不,所有进程都在同一个 JVM 中运行。它们也是实际的线程。
-
线程不会崩溃。他们只会争夺资源。
-
一个共享的、固定大小的 (20) 线程池执行器应该可以工作。每个进程可以有一个信号量来限制提交给执行者的并发任务的数量。
-
@Raedwald 不幸的是,当他们尝试打开与拒绝第 21 个外部服务器的连接时,它们崩溃了。
标签: java java-threads executor