这纯粹是一个理论问题,因为我不确定导致此问题的条件是否普遍。
例如,假设您有一个线程,您使用它的启动方法启动:
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/