new:刚被创建出来,且没有被运行的线程
runnable:可运行的状态,正在等待CPU的调度
blocked:锁的状态,阻塞中,等待监视器的锁定,同步关键字synchronized会导致没有在运行的线程处于此状态
waiting:等待状态,调用不带超时的方法会出现此状态,如Object.wait()、Thread.join()、LockSupport.park()
Timed waiting:等待状态、不过会带有超时的设置、如Thread.sleep()、Object.wait()、Thread.join()、LockSupport.parkNanos()、
LockSupport.parkUntil()
Terminated:线程的最终状态、正常执行完或者出现异常
具体的流程如下图所示
而如果你要中止一个正在执行中的线程,可以调用stop方法(注意官方的destroy 方法是没有实现的)
stop会直接中止正在执行的线程,他是属于一种不安全的状态,破坏线程的原子性,所以官方是不推荐在生产环境中使用的
第二种相对比较优雅,可以使用interrupt方法,这个方法他会保证线程的原子性,也就是等到你的线程真正执行完了,才去中止
而第三种就是可以使用标志位的方式,利用线程外定义的变量,控制线程内的代码是否需要执行。至于用第二种还是第三种,那就仁者见仁了 ^_^