我有一个要求,其中 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/