在阅读了 join 方法后,我有一些疑问:我认为多线程是在我们的程序中引入并行性的一种方法,并且相信有时我们需要一些线程在另一个线程之前完成。但我不明白为什么程序员会写这样的东西:
public static void main(String[] args) {
Thread t1 = new Thread(new MyRunnable(), "t1");
Thread t2 = new Thread(new MyRunnable(), "t2");
t1.start();
t1.join();
t2.start();
t2.join();
}
在此示例中使用线程与以下代码相比有何优势:
public static void main(String[] args) {
Thread t1 = new Thread(new MyRunnable(), "t1");
Thread t2 = new Thread(new MyRunnable(), "t2");
t1.run();//just run the task of thread without start new thread
t2.run();
}
在第一个示例中,主线程应该暂停直到 t1 完成,然后启动 t2 并等待直到完成,在第二个示例中也会发生这种情况。
为什么我们创建新线程并使用 join() 让父线程等待?为什么不能使用父线程而不是新线程?
最佳答案
无论哪种方式,您都不会获得好处。
在第一个示例中,您有两个线程,并且 join()
没有用。
但是假设一个场景
- 您有多个线程(主线程、T1、T2、T3 和 T4)
- Main、T1、T2 可以并行运行,但 T3 应等待 T4 完成
在上述情况下,所有线程都可以并行启动,但您只能加入 T3 和 T4 线程。
请参阅下面的帖子了解 join() 的用例:
Why we should use Join in threads?
如果您想探索多线程的高级版本,请使用 CountDownLatch代替join()
关于java - 为什么我们创建新线程并使用 join() 让父线程等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44384171/