多线程-线程生命周期

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()正常返回或者由于抛出异常而提前终止都会导致线程处于该状态

上一篇下一篇

猜你喜欢

热点阅读