Java 执行器池一次限制线程数

Java 执行器池一次限制线程数,java,multithreading,threadpool,threadpoolexecutor,Java,Multithreading,Threadpool,Threadpoolexecutor,在这种情况下,我必须运行大约10000个线程。显然,一台机器不能并行运行这么多线程。有没有什么方法可以让线程池在开始时运行特定数量的线程,一旦一个线程完成,剩下的线程就可以开始处理 Executors.newFixedThreadPool(nThreads)是您最可能要寻找的。一次运行的线程数与指定的线程数相同。是的,一台机器不能同时并行运行10000个线程,但它可以同时运行它们。根据每个线程的资源密集程度,在您的情况下使用它可能更有效 Executors.newCachedThreadPool

在这种情况下,我必须运行大约10000个线程。显然,一台机器不能并行运行这么多线程。有没有什么方法可以让线程池在开始时运行特定数量的线程,一旦一个线程完成,剩下的线程就可以开始处理

Executors.newFixedThreadPool(nThreads)
是您最可能要寻找的。一次运行的线程数与指定的线程数相同。是的,一台机器不能同时并行运行10000个线程,但它可以同时运行它们。根据每个线程的资源密集程度,在您的情况下使用它可能更有效
Executors.newCachedThreadPool()
其中根据需要创建尽可能多的线程,并重用已完成的线程。

Executors.newFixedThreadPool(nThreads)
是您最可能要找的。一次运行的线程数与指定的线程数相同。是的,一台机器不能同时并行运行10000个线程,但它可以同时运行它们。根据每个线程的资源密集程度,在您的情况下使用它可能更有效
Executors.newCachedThreadPool()
,其中根据需要创建尽可能多的线程,并重用已完成的线程。

对于此用例。您可以使用带有阻塞队列的ThreadPollExecuter。本教程对此进行了很好的解释。

对于本用例。您可以使用带有阻塞队列的ThreadPollExecuter。本教程对此进行了很好的解释。

听起来您希望在一组线程上运行10000个任务。一种相对简单的方法是创建一个列表,然后将所有任务添加到该列表中,并将其包装为Runnable。然后,创建一个类,该类接受构造函数中的列表,弹出列表的Runnable,然后运行它。必须以某种方式同步此活动。该类在列表为空时退出。使用该类启动一些线程。他们会烧掉名单,然后停下来。您的主线程可以监视列表的长度。

听起来您希望在一组线程上运行10000个任务。一种相对简单的方法是创建一个列表,然后将所有任务添加到该列表中,并将其包装为Runnable。然后,创建一个类,该类接受构造函数中的列表,弹出列表的Runnable,然后运行它。必须以某种方式同步此活动。该类在列表为空时退出。使用该类启动一些线程。他们会烧掉名单,然后停下来。您的主线程可以监视列表的长度。

使用
执行器。newFixedThreadPool(10000)
invokeAll
将抛出一个OutOfMemory异常,该异常包含这么多线程。您仍然可以通过向其提交任务而不是同时调用所有任务来使用它,这比仅使用
invokeAll

执行器更安全。newFixedThreadPool(10000)with
invokeAll
将对那么多线程抛出OutOfMemory异常。您仍然可以通过向其提交任务来使用它,而不是同时调用所有任务,这比只调用
invokeAll

更安全。您看过了吗?这些不是线程,这些是任务。线程池使用有限数量的线程来运行无限数量的任务。标题为“执行器池”。你是说当你在网上搜索类似的主题时,你没有找到任何关于如何在Java中设置线程池的文章吗?我觉得这很难相信。看起来你好像没有做任何研究。因为这个原因我投了反对票@bradimus我只使用线程池,我想限制线程数量,这样CPU就不必在上下文切换上花费太多时间。@Andreas我正在使用它,只是不知道如何限制它,以防止CPU在上下文切换上花费太多时间。您看了吗?这些不是线程,这些是任务。线程池使用有限数量的线程来运行无限数量的任务。标题为“执行器池”。你是说当你在网上搜索类似的主题时,你没有找到任何关于如何在Java中设置线程池的文章吗?我觉得这很难相信。看起来你好像没有做任何研究。因为这个原因我投了反对票@bradimus我只使用线程池,我想限制线程的数量,这样CPU就不必在上下文切换上花费太多时间。@Andreas在使用线程池时,只是不知道如何限制线程池,以防止CPU在上下文切换上花费太多时间该类已经存在。它被称为
java.util.concurrent.ThreadPoolExecutor
。该类已经存在。它被称为
java.util.concurrent.ThreadPoolExecutor