java - 如何在所有子线程执行完毕后运行主线程

标签 java multithreading inner-classes anonymous-class

我有一个要求,其中 28 个线程必须完成某些功能。我在匿名内部类中创建了这些线程,例如:

Thread t=new Thread(new Runnable(){public void run() 
                        {//code
                        }}
                                );

                        t.start();

现在我希望在所有这些线程完成那里的工作后开始进一步的执行。

注意:我对 join() 方法感到困惑,因为它使我的线程按顺序运行。

那么谁能建议我如何在这些线程完成工作后让主线程运行。

最佳答案

Note : I am confused about join() method as it makes my threads run sequentially.

如果你有这样的代码,它会这样做:

for (Runnable runnable : runnables) {
    Thread t = new Thread(runnable);
    t.start();
    t.join();
}

但是,您可以启动所有要并行运行的线程,然后对它们全部调用join。例如:

List<Thread> threads = new ArrayList<>();
for (Runnable runnable : runnables) {
    Thread t = new Thread(runnable);
    t.start();
    threads.add(t);
}
// Now everything's running - join all the threads
for (Thread thread : threads) {
     thread.join();
}

// Now you can do whatever you need to after all the
// threads have finished.

当然,还有许多其他方法 - 直接启动线程可能不如使用更高级别的抽象适合您的代码;这取决于您要实现的目标。不过,上面的代码应该可以正常工作 - 假设所有 Runnable 都能够并行运行而不会通过同步相互阻塞。

关于java - 如何在所有子线程执行完毕后运行主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28164990/

相关文章:

java - CQ-使用 xtype ="datetime"以原始字符串形式获取日期和时间

java - 无界通配符类型和有界通配符类型之间的区别?

java - GWT 和 ScriptEngineManager

Java 一个临界区多个信号量

c# - 并行编程竞争条件

java - JMS session 线程影响

java - MVC 中通过线程从内部类调用外部类

java - 我无法使用 Gson 库正确读取 JSON

Java 内部类可见性难题

java - 与外部类同名的内部类?