阻止异步代码

时间:2016-01-18 13:03:32

标签: java asynchronous blocking

我想确保主线程被阻塞,直到异步调用完成。 我正在创建一个新的Thread来执行异步代码。 这是我的代码:

Thread r = new Thread() {
    public void run() {
    asyncCall();
    }
};
r.run();
r.join();

r.join将阻止主线程直到r死亡。 那够了吗? 当线程r真的死了?是在异步调用完成后。

2 个答案:

答案 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()