Java的线程状态及转换(六种)

线程有六种状态:NEW、RUNNABLE、WAITING、TIMED_WAITING、BLOCKED和TERMINATED。NEW是创建但未启动状态,RUNNABLE包括就绪和运行,WAITING是无限期等待,TIMED_WAITING是有限期等待,BLOCKED是阻塞状态,而TERMINATED是线程已结束的状态。线程状态在不同条件下游走,如启动、等待、超时等待、阻塞和终止。
摘要由CSDN通过智能技术生成

目录

一、线程的状态有几种?

二、每种状态表示的含义?

三、线程状态转换


一、线程的状态有几种?

NEW:创建状态

 RUNNABLE:可运行状态(运行状态)

 WAITING:等待状态

TIMED_WAITING:超时等待状态

BLOCKED:阻塞状态

TERMINATED:销毁状态(终止状态)

共6种。

二、每种状态表示的含义?

NEW 新建态使用new关键字创建一个thread对象,刚刚创建出的这个线程对象就处于new状态。在这个状态的线程 因为没有调用start(),仅仅是一个java对象。
RUNNABLE 可运行态(运行态)可工作的,又可以分为正在工作中的和即将开始工作的。只有处于可运行状态的线程才会得到CPU资源
WAITING 等待态无限期等待另一个线程执行特定操作(通知 或 中断),需要显式的被唤醒
TIMED_WAITING 超时等待态有限期的等待另一个线程执行特定操作,与Waiting不同:达到一定时间后会自动唤醒
BLOCKED 阻塞态在可运行阶段 争抢锁失败的线程就会从可运行变阻塞。
TERMINATED 销毁态(终止态)工作完成了,释放所有资源。

状态说明:

  1. NEW 新建态:Thread t = new Thread()后,就进入了new状态,没有调用start()方法,在堆中仅仅给分配了内存
  2. RUNNABLE 可运行态:当调用线程对象的start(),调用了start()方法后,线程就进入了就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备 所有需要的资源都已经准备就绪,随时等待CPU调度执行,只有处于就绪状态的线程才能有机会进入到运行状态并不是说明 执行了t.start()后,此线程就会立即执行。所以 可运行态Runnable包含Ready就绪➕Running运行中
  3. BLOCKED 阻塞状态:在可运行阶段 争抢锁失败的线程就会从 可运行状态转为阻塞状态。当线程处于阻塞状态时,调度器将忽略线程,不会分配给线程任何CPU时间。
  4. WAITING 等待状态:无限时。可运行状态 争抢锁成功,但是资源不足,主动放弃锁,无期限的等待 直到 条件满足再恢复可运行态,需要被显式的唤醒(notify()或者 notifyAll()唤醒等待的线程)。
  5. TIMED_WAITING 超时等待态:有时限的的等待。一般有两种方式可以进入超时等待状态:wait(Long milliseconds) 和 sleep(Long milliseconds)。
  6. TERMINATED 销毁态(终止态):线程退出run(),就进入了终止态。

三、线程状态转换

​​​​​​​​​​​​​​ 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值