2017-07-26 67 views
-1

我有一种情况需要运行一些10,000个线程。显然,一台机器不能并行运行多个线程。有什么办法可以让线程池在开始时运行一些特定数量的线程,只要一个线程完成,剩下的线程就可以开始处理了?一次执行程序池限制线程数

+0

你看过[ThreadPoolExecutor](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html)吗? – bradimus

+0

那些不是线程,那些是_tasks_。线程池使用有限数量的线程来运行无限数量的任务。 –

+0

标题说“执行者池”。你是说当你在网上搜索类似的主题时,你没有发现*任何文章展示了如何在Java中设置线程池?我觉得很难相信。这看起来更像**你没有做任何研究**。因为这个原因被低估了! – Andreas

回答

2

Executors.newFixedThreadPool(nThreads)是最有可能的你正在寻找。只有指定的线程数量一次可以运行多少个线程。是的,一台机器不能同时运行10,000个线程,但它可以同时运行它们。根据每个线程的资源密集程度,在使用 Executors.newCachedThreadPool()时,可能会更高效,其中根据需要创建多个线程,并且已完成的线程将被重用。

0

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

+0

该类已经存在。它被称为'java.util.concurrent.ThreadPoolExecutor'。 –