我想确保主线程被阻塞,直到异步调用完成。 我正在创建一个新的Thread来执行异步代码。 这是我的代码:
Thread r = new Thread() {
public void run() {
asyncCall();
}
};
r.run();
r.join();
r.join
将阻止主线程直到r死亡。
那够了吗?
当线程r真的死了?是在异步调用完成后。
答案 0 :(得分:2)
首先,你需要调用thread.start()
而不是thread.run()
,答案是肯定的,thread.join
阻塞直到线程死亡。
什么时候真的死了? Check this out
但建议您直接使用executor
而不是Threads
。
Future<?> future = executor.submit(()->{});
future.get(); // blocks here
答案 1 :(得分:1)
r.join会阻塞主线程,直到r死掉。
正确。
足够吗?
如果目标是阻止主线程在r
运行ayncCall
时继续执行,则为是。
当线程r真的死了?是在异步调用完成之后。
你可以说线程在asyncCall
完成后完成执行。 &#34;垂死&#34;取决于你的定义。 asyncCall
完成后,线程可能处于活动状态,因为JVM决定将其重新用于其他目的。它可能不会。
PS。您需要致电Thread.start()
,而不是Thread.run()
。