一、前言:
二、状态概述
三、状态详述
3.1、
新生状态(New)
start()
方法进入 就绪状态
。 new
关键字建立一个线程对象后,该线程对象就处于新生状态。
3.2、
就绪状态(Runnable)
Thread
对象后,它就会进入执行状态。 run()
方法 1. 新建线程:调用**start()**方法,进入就绪状态; 2. 阻塞线程:阻塞解除,进入就绪状态; 当前线程sleep()方法结束, 其他线程join结束,等待用户输入完毕,某个线程拿到对象锁, 这些线程也将进入就绪状态。 3. 运行线程:当前线程时间片用完了,调用**yield()**方法,直接进入就绪状态; 4. 运行线程:JVM将CPU资源从本线程切换到其他线程。
3.3、
运行状态(Running)
run()
方法中的代码,直到调用其他方法而终止或等待某资源而阻塞或完成任务而死亡
3.4、
阻塞状态(Blocked)
1. 执行sleep(int millsecond)方法,使当前线程休眠,进入阻塞状态。 当指定的时间到了后,线程进入就绪状态。 2. 执行wait()方法,使当前线程进入阻塞状态。当使用nofity()方法唤醒这个线程后, 它进入就绪状态。 3. 线程运行时,某操作会阻塞,eg:执行IO流操作(read()/write()方法本身就是阻塞的方法)。 只有当引起该操作阻塞的原因消失后,线程进入就绪状态。 4. join()线程联合: 当某个线程等待另一个线程执行结束后,才能继续执行时, 使用join()方法。
sleep()方法,线程是抱着资源睡觉(不释放资源)。
3.5、
死亡状态(Terminated)
java.lang.IllegalThreadStateException
1.正常运行的线程完成了它run()方法内的全部工作 2.线程被强制终止,如通过执行stop()或destroy()方法来终止一个线程。 (注:stop()、destroy()方法已经被JDK废弃,不推荐使用,不安全)。