线程什么时候达到终止状态?当run()
方法结束时,线程是否会被终止?
那么如何正确检查线程是否已经终止?因为对我来说,以下条件似乎总是成立:
if(!(thread.getState()).equals("TERMINATED")){}
有什么想法吗?
线程什么时候达到终止状态?当run()
方法结束时,线程是否会被终止?
那么如何正确检查线程是否已经终止?因为对我来说,以下条件似乎总是成立:
if(!(thread.getState()).equals("TERMINATED")){}
有什么想法吗?
首先:Thread.getState()
方法返回一个Thread.State
对象,它永远不会等于一个String
对象,因此您需要写成这样的代码:
if(thread.getState()!=Thread.State.TERMINATED){ }
是的,当run()
方法结束(无论是正常结束还是抛出异常),线程都将进入TERMINATED
状态。
测试方法thread.isAlive()
或者选择使用thread.join()
直到线程执行完成。
getState()
的结果不会有任何不同。 - orodbhen
run()
方法结束时(无论是正常结束还是因为抛出异常),线程将进入终止状态。但事实并非如此,如果出现异常等异常情况,它会调用UncaughtExceptionHandler
并且可以自由地执行任何操作(包括像Thread.currentThread().run()
这样的操作)。线程在exit()
方法之后处于终止状态,该方法可以在ThreadGroup
同步上阻塞(可能是无限期的)。 - bestsss