如何在所有子线程完成之后运行主线程

Onk*_*nki 2 java multithreading anonymous-class inner-classes

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

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

                        t.start();
Run Code Online (Sandbox Code Playgroud)

现在我希望在所有这些线程完成工作之后进一步执行.

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

所以任何人都可以建议我,一旦这些线程完成工作,我怎样才能使主线程运行.

Jon*_*eet 6

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

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

for (Runnable runnable : runnables) {
    Thread t = new Thread(runnable);
    t.start();
    t.join();
}
Run Code Online (Sandbox Code Playgroud)

但是,您可以启动要并行运行的所有线程,然后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.
Run Code Online (Sandbox Code Playgroud)

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