java - 如何在调用 Join() 之前停止线程返回

标签 java multithreading

这纯粹是一个理论问题,因为我不确定导致此问题的条件是否普遍。

例如,假设您有一个线程,您使用它的启动方法启动:

Thread c = new Thread();
c.start();

紧接着,您调用线程上的 Join() 方法,告诉您所在的方法等待线程执行完毕后再继续。

c.join();

线程是否有可能在调用 join 方法之前执行并完成,因此让该方法不知道它必须等待 c 完成才能继续?我想您可以在调用 start() 方法之前尝试调用 join() 方法,但每当我在测试用例中尝试这样做时,都会出现错误。

有人知道这个问题的可能修复方法,或者 JVM 是否处理它?正如我所说,我无法触发这种情况,但理论上是可能的......

最佳答案

根据Thread#join(long millis)源码,isAlive()方法用于检测线程状态。

/**
 * Tests if this thread is alive. A thread is alive if it has
 * been started and has not yet died.
 *
 * @return  <code>true</code> if this thread is alive;
 *          <code>false</code> otherwise.
 */
public final native boolean isAlive();

如果线程已完成,此方法显然会返回 false,因此 thread.join() 将立即退出。

关于java - 如何在调用 Join() 之前停止线程返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9213140/

相关文章:

java - 如何从 IntentService 中管理倒计时计时器?

java - 有没有办法将监听器添加到执行者/ future 的?

python - 停止运行无限循环的 python 线程

java - 如何让DynamicReports(JasperReports)显示在客户端

java - 如果在 Java 中关闭套接字,是否需要关闭流?

java - 如何使用 Jsoup 获取包含非 ASCII 字符(ą、ś ...)的 URL?

iOS - 从一台设备向另一台设备流式传输和接收音频以一个仅发送而另一个仅接收结束

java 带有线程的简单动画

java - 错误:类HTable中的构造函数HTable无法应用于给定类型

java - 无法解析字符串值 'kafka.bootstrap-servers' 中的占位符 "${kafka.bootstrap-servers}"