假设线程A
正在运行。我有另一个帖子,B
,谁不是。 B已经启动,处于可运行状态。
如果我致电:B.join()
会怎样?
它会暂停执行A
还是会等待A的run()
方法完成?
答案 0 :(得分:8)
join()将使当前正在执行的线程等待它被调用的线程死掉。
所以 - 如果A正在运行,你调用B.join(),A将停止执行,直到B结束/死亡。
答案 1 :(得分:6)
加入等待直到线程死亡。如果你在死线程上调用它,它应该立即返回。这是一个演示:
public class Foo extends Thread {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Start");
Foo foo = new Foo();
try {
// uncomment the following line to start the foo thread.
// foo.start();
foo.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Finish");
}
public void run() {
System.out.println("Foo.run()");
}
}
答案 2 :(得分:3)
来自http://java.sun.com/docs/books/tutorial/essential/concurrency/join.html
join方法允许一个线程 等待另一个完成。如果 t是一个Thread对象,其线程是 目前正在执行,
t.join();
导致当前线程暂停 执行直到t的线程终止。 连接过载允许程序员 指定等待期。然而, 与睡眠一样,加入取决于 操作系统的计时,所以你不应该 假设加入将完全等待 只要你指定。
我强烈建议将Java Tutorial作为学习资源。
答案 3 :(得分:2)
在线程上调用join方法会导致调用线程等待线程join()被调用以完成。它不会影响任何其他不是调用者或被调用者的线程。
在你的例子中,如果你从A调用B.join(),A只会等待B完成。如果C正在调用B.join(),则A的执行不受影响。
答案 4 :(得分:0)
我认为如果A
是当前运行的线程。对B.join()
的调用将暂停,直到B的run()
方法完成。这是对的吗?
答案 5 :(得分:0)
您调用B.join()的线程将阻止并等待B完成。