多线程-线程生命周期
2019-06-07 本文已影响0人
ffxxbb5
image.png
线程总共有6个生命周期状态,线程状态可以通过thread.getState()查看
线程状态是Thread.State枚举类型定义的
1.新建(new):已创建而未启动,由于线程实例只能被启动一次,因此一个线程只可能有一次处于该状态
2.runnable:包括两个子状态:READY和RUNNING
前者表示改状态的线程可以被线程调度器进行调度而使之处于RUNNING状态
后者表示处于改状态的线程正在运行,即相应线程对象的run方法所对应的指令正在由处理器执行。
执行Thread.yield(),状态可以会转换为READY
3.Blocked:线程发起阻塞式I/O操作,或者申请一个独占资源时就会处于该状态。
处于该状态的线程并不会占用处理器资源
4.WAITING:线程执行了Object.wait(),Thread.Join()和LockSupport.park(Object),会是现成变为Waiting状态。
执行Object.notify()/notifyAll()和LockSupport.unpark(Object)可以使线程变回RUNNABLE状态
5.TIMED_WAITING:该状态和waiting类似,差别在于处于改状态的线程并非无限地等待其他线程执行特定操作,而是有事件限制地。
当其他线程没有在指定时间内执行该线程所期望的特定操作时,该线程的状态自动转换为RUNNABLE.
6.TERMINATED:Thread.run()正常返回或者由于抛出异常而提前终止都会导致线程处于该状态