线程的生命周期
新建
New
就绪Runnable
等待执行
运行Running
阻塞Block
死亡Dead
线程被创建之后处于New状态,start()方法调用之后处于Runnable状态,至于什么时候开始则需要等待JVM的调度。
线程的run()是线程的执行体,start()方法才是线程的启动方法。如果直接调用线程的run()方法的话,java会把线程当成普通对象,把run()方法当成普通方法,所以并不会启动新的线程。
如果就绪状态的线程获得了cpu,开始执行run()的方法体。
线程死亡
- run()或者call()方法执行完毕,线程正常结束。
- 线程抛出一个未捕获的Exception或者Error。
- 直接调用该线程的stop()方法来结束该线程---该方法容易导致死锁,尽量不适用。
当主线程结束时,并不会影响其他线程,其他线程不会随之结束,一旦子线程启动起来后,它就拥有跟主线程同样的地位,不会受到主线程的影响
判断一个线程是否死亡:osAlive()。就绪,运行,阻塞状态的线程返回true,新建和死亡状态的线程返回false。
已死亡的线程不可再start()。抛出异常IllegalThreadStateException