【发布时间】:2017-06-06 07:45:43
【问题描述】:
在阅读了 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() 让父线程等待?为什么不能用父线程代替新线程?
【问题讨论】:
-
调用 tx.run() 并没有启动任何线程,这就是区别!
-
在第二种情况下,您的 main 方法可能在您的线程 t1 和 t2 之前完成。这就是区别。在第一种情况下,Main 方法永远不会在线程 t1 和 t2 之前完成。
-
我知道,我的问题是当我们需要停止当前线程直到它完成时,为什么要创建线程?为什么干脆不使用当前线程而不是新线程?
标签: java multithreading join