线程有哪些基本状态,每种状态都代表什么

image.png


new(新建):

当程序使用 new 创建一个线程后, 该线程处于新建状态, 此时它和其它 java 对象一样, 仅仅由 JVM 为其分配内存并初始化成员变量值.

runnable(可运行状态):

实际上可以细分成两种状态: ready(就绪) 和 running(运行) 状态.

ready(就绪):

当线程对象调用 start() 方法后, 该线程处于就绪状态, 进入线程队列排队. 此时该状态线程并未开始执行, 仅表示可以运行了. 至于该线程何时运行, 取决于 CPU 调度器的调度.

running(运行):

表示某线程对象被 CPU 调度器调度, 执行线程体. 就绪状态和运行状态时可以互相切换的, 切换的原因依旧参照 CPU 调度器调度了哪一个线程.

blocked(阻塞):

正在运行的线程遇到某个特殊情况, 比如同步, 等待I/O操作完成等. 进入阻塞状态的线程会让出 CPU 资源, 并暂时停止自己的执行.

waiting(等待):

有时一个可运行状态线程转变成等待状态, 它会等待另一个线程来执行一个任务, 一个等待状态的线程只有通过另一个线程通知它转到可运行状态, 才能继续执行.

timed waiting(计时等待):

计时等待状态是等待状态的升级版, 它会有一个定时器, 在特定时间后自动唤醒该线程对象, 让其进入就绪状态.

terminated(终止):

即死亡状态, 表示线程终止. 当线程成功执行完成或线程抛出未捕获的 Exception 和 Error 或调用线程的 stop 方法时进入该状态.

猜你喜欢

转载自www.cnblogs.com/lk13227/p/13205431.html