假设一个线程A
正在运行。我有另一个线程B
,谁没有。B 已启动,处于可运行状态。
如果我调用:会发生什么B.join()
?
它会暂停执行A
还是等待 A 的run()
方法完成?
假设一个线程A
正在运行。我有另一个线程B
,谁没有。B 已启动,处于可运行状态。
如果我调用:会发生什么B.join()
?
它会暂停执行A
还是等待 A 的run()
方法完成?
join()将使当前正在执行的线程等待它被调用的线程死亡。
所以 - 如果 A 正在运行,并且您调用 B.join(),A 将停止执行,直到 B 结束/死亡。
Join 一直等到线程死掉。如果你在死线程上调用它,它应该立即返回。这是一个演示:
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()");
}
}
来自http://java.sun.com/docs/books/tutorial/essential/concurrency/join.html
join 方法允许一个线程等待另一个线程完成。如果 t 是其线程当前正在执行的 Thread 对象,
t.join();
导致当前线程暂停执行,直到 t 的线程终止。连接的重载允许程序员指定一个等待时间。但是,与 sleep 一样,join 的时间取决于操作系统,因此您不应假设 join 将等待您指定的时间。
我强烈推荐 Java 教程作为学习资源。
在线程上调用 join 方法会导致调用线程等待线程 join() 被调用完成。它不会影响不是调用者或被调用者的任何其他线程。
在您的示例中,如果您从 A 调用 B.join(),A 只会等待 B 完成。如果 C 正在调用 B.join(),则 A 的执行不受影响。
我认为如果A
当前线程正在运行。调用B.join()
将暂停它,直到 B 的run()
方法完成。这个对吗?
无论您从哪个线程调用 B.join() 都会阻塞并等待 B 完成。