Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 限制多个执行器中的总线程数_Java_Java Threads_Executor - Fatal编程技术网

Java 限制多个执行器中的总线程数

Java 限制多个执行器中的总线程数,java,java-threads,executor,Java,Java Threads,Executor,我有六个进程将数据发送到外部服务器。每个进程运行多个“传输”线程以提高性能和并行性(延迟、大文件等)。我每个进程有一个执行器,每个进程最多有5个线程 现在,由于外部服务器只支持20个线程,而我的进程尝试总共运行30个线程(每个线程6个进程x 5个线程),因此一些线程会崩溃。我明白了 有没有办法在Java中创建一个“大线程池”(有20个线程),将所有进程的总传输线程限制在最多20个 或者,我正在考虑为所有进程创建一个单一执行器,但一个进程可能占用所有线程,而另一个线程则处于饥饿状态。您可以为您的进

我有六个进程将数据发送到外部服务器。每个进程运行多个“传输”线程以提高性能和并行性(延迟、大文件等)。我每个进程有一个执行器,每个进程最多有5个线程

现在,由于外部服务器只支持20个线程,而我的进程尝试总共运行30个线程(每个线程6个进程x 5个线程),因此一些线程会崩溃。我明白了

有没有办法在Java中创建一个“大线程池”(有20个线程),将所有进程的总传输线程限制在最多20个


或者,我正在考虑为所有进程创建一个单一执行器,但一个进程可能占用所有线程,而另一个线程则处于饥饿状态。

您可以为您的进程使用单一执行器和实现模式。
例如,Hystrix和Resilience4j都有现成的实现。

通过进程,您是指每个进程都在自己的JVM中运行吗?不,所有进程都在同一个JVM中运行。它们也是实际线程。线程不会崩溃。它们只会争夺资源。一个共享的、固定大小(20)的线程池执行器应该可以工作。每个进程可能都有一个信号量来限制提交给执行者的并发任务的数量。@Raedwald不幸的是,当它们试图打开与拒绝第21个任务的外部服务器的连接时,它们会崩溃。这正是我要找的。我假设Java不提供任何标准实现,所以我需要实现它,对吗?您可以使用标准Java对象(如锁、信号量或原子计数器)实现它,也可以使用第三方库。取决于您的任务和偏好。太好了,我想我将使用单个执行器而不是6个,并且将为每个进程使用一个信号量(大小为5)。