JDK里面Thread.State类定义了线程的几种状态。
要想实现多线程,必须在主线程中新建新的线程对象。Java语言使用Thread类及其子类对象来表示线程,它的一个完整的生命周期一般要经过以下几个周期。
创建:当一个Thread类及其子类对象被创建并声明的时候,新生的线程对象属于创建状态。
就绪:处于新建状态的线程被strat()后,将进入线程队列等待cpu时间片,此时它已经具备了运行的条件就等着cpu给其分配运行的资源。
运行:当就绪状态的线程被调度并获得了CPU资源时便进入了运行状态,run()方法里面定义了线程的操作
阻塞:在某种情况下被人为挂起或执行输入输出操作时,线程需要让出cpu并中止操作进入阻塞状态。
结束:线程完成了它全部的工作或线程被提前强制性地终止或出现异常情况导致结束。
线程从运行到阻塞状态的几种可能
(1)执行了sleep(time)方法,在指定的time里面该线程是处于阻塞状态的
(2)在a线程里面执行了b线程的join()方法,这时a线程会阻塞住
(3)某些线程在等待同步锁的过程中是处于阻塞状态的
(4)线程调用了wait()方法或suspend()方法
线程从阻塞状态到就绪状态
(1)sleep(time)方法执行结束后,线程便又处于就绪状态了
(2)在a线程里面执行了b线程的join()方法,当b线程执行结束后,a线程便退出阻塞
(3)当线程获取到同步锁后也便进入了就绪状态
(4)使用notify()或notifyAll()来唤醒线程