线程的生命周期会经历以下五种状态:
新建:new创建线程对象时
就绪:调用start()方法时
运行:调用run()方法时
阻塞:多种原因可导致阻塞
死亡:多种原因
发生以下情况时,线程将进入阻塞状态:
调用sleep()方法时,此时会放弃它所占用的处理器资源(过了sleep指定时间不再阻塞)
调用一个阻塞式IO方法还没有返回之前,该线程被阻塞(阻塞IO方法返回后不再阻塞)
试图获取一个正被其它线程所持有的同步监视器(拿到监听器不再阻塞)
等待通知时(notify)(其它线程调用了notify时不再阻塞)
调用suspend()方法将程序挂起时(线程调用resume()方法时撤销挂起时不再阻塞)
线程死亡情况:
线程正常结束(run或call方法执行完毕)
线程抛出一个未捕获的Exception或Error
线程自己调用stop()方法(该方法容易导致死锁)
PS:
如果直接调用run()方法,系统会把该线程对象当成普通对象。
如果直接调用了run()方法,则该线程不再处于新建状态,不能再次调用start()方法,否则会报IllegalThreadStateException异常
如果直接调用了run()方法,则在run()方法里不能直接通过this.getName()方法获得线程名。