【问题标题】:How do I run 10 threads at a time from 100 threads in Java?如何从 Java 中的 100 个线程一次运行 10 个线程?
【发布时间】:2010-11-16 21:08:52
【问题描述】:

我正在使用 Java 6。

假设我创建了 100 个线程,每个线程完成一项任务。我想一次连续运行 10 个线程。这意味着如果我正在运行线程 1-10,并且线程 8 完成,我希望能够立即启动线程 11,而无需等待 1-10 加入。

我该怎么做?

解决这个问题的一种方法可能是使用 isAlive() 方法,但我想知道是否可以不进行轮询。

谢谢。

【问题讨论】:

标签: java multithreading


【解决方案1】:

为什么需要这样做?

更好的方法是创建一个包含 10 个线程的池并向其中提交 100 个任务。它将产生完全相同的效果 - 100 个任务中有 10 个同时运行。

ExecutorService pool = Executors.newFixedThreadPool(10);

for (int i = 0; i < 100; i++)
    pool.submit(...);

【讨论】:

    【解决方案2】:

    使用具有 10 个线程的 ExecutorService 线程池来提交任务。你 summit 的任何作业都将在 q Queue 中结束,10 个线程将执行你的 1000 个作业。

    【讨论】:

      【解决方案3】:

      当你在谈论并发时说“一次”是令人困惑的。如果您使用线程池大小为 10 的 ExecuterService,则将启用 100 个线程中的 10 个来执行。但是请记住,如果您只有 1 个 CPU 并且您的一个线程具有更高的优先级,则所有其他线程可能会保持等待状态。 我的建议是根据可用的 CPU 数量调整线程数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-27
        • 1970-01-01
        • 2010-12-13
        • 1970-01-01
        相关资源
        最近更新 更多