Java 线程的几种状态

线程有新建、就绪、运行、阻塞、等待和终止六种状态。新建状态是线程创建时的状态,就绪状态是线程准备好执行但未分配CPU时的状态,运行状态是获得CPU执行的时间片的状态。线程可以通过join、yield、sleep或wait方法进入阻塞或等待状态,且sleep不会释放锁。当线程变为后台进程(setDaemon(true)),如果进程中只剩后台线程,进程将结束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 新建状态(NEW):当线程对象被创建时,它处于新建状态,此时系统已经为该线程分配了必要的资源,例如线程栈等。

  2. 就绪状态(READY):当线程已经准备好被调度执行,但是当前没有分配到 CPU 时间片时,它处于就绪状态。

  3. 运行状态(RUNNING):当线程被分配到 CPU 时间片并正在执行时,它处于运行状态。

  4. 阻塞状态(BLOCKED):当线程因为某些原因无法运行时,例如等待某个资源、等待 IO 完成等,它处于阻塞状态。如果调用 sleep()、 suspend()、 wait()等方法,线程都将进入堵塞状态

  5. 等待状态(WAITING):当线程因为某个条件而需要等待时,例如等待某个锁、等待某个信号量等,它处于等待状态。

  6. 终止状态(TERMINATED:):当线程执行完成或出现了异常而结束时,它处于消亡状态。

常见问题:

1、造成线程阻塞的方法?

阻塞线程的方法:join、yield、sleep 和Object的wait()方法

2、Java的守护进程(后台进程)?

设置线程为后台进程运行:setDaemon(true) 如果一个进程中只有后台线程在运行,这个进程就会结束。

3、造成线程阻塞后,线程回到哪个状态了?

通过join、yield、sleep造成线程阻塞后是回到了就绪状态

3、哪些状态之后是回到就绪状态?

 a)通过join、yield、sleep造成线程阻塞后是回到了就绪状态

 b)遇到synchronized后

 c)遇到Object的等待wait方法后

4、sleep会释放锁吗?

 sleep不会释放锁

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值