LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 152|回复: 0

线程状态转换

[复制链接]
发表于 2023-12-31 01:06:46 | 显示全部楼层 |阅读模式
线程状态转换
# 新建(New)创建后尚未启动。
# 可运行(Runnable)可能正在运行,也可能正在等待 CPU 时间片。
包含了操作系统线程状态中的 Running 和 Ready。
# 阻塞(Blocking)等待获取一个排它锁,如果其线程释放了锁就会结束此状态。
# 无限期等待(Waiting)等待其它线程显式地唤醒,否则不会被分配 CPU 时间片。
进入方法退出方法
没有设置 Timeout 参数的 Object.wait() 方法Object.notify() / Object.notifyAll()
没有设置 Timeout 参数的 Thread.join() 方法被调用的线程执行完毕
LockSupport.park() 方法-# 限期等待(Timed Waiting)无需等待其它线程显式地唤醒,在一定时间之后会被系统自动唤醒。
调用 Thread.sleep() 方法使线程进入限期等待状态时,常常用“使一个线程睡眠”进行描述。
调用 Object.wait() 方法使线程进入限期等待或者无限期等待时,常常用“挂起一个线程”进行描述。
睡眠和挂起是用来描述行为,而阻塞和等待用来描述状态。
阻塞和等待的区别在于,阻塞是被动的,它是在等待获取一个排它锁。而等待是主动的,通过调用 Thread.sleep() 和 Object.wait() 等方法进入。
进入方法退出方法
Thread.sleep() 方法时间结束
设置了 Timeout 参数的 Object.wait() 方法时间结束 / Object.notify() / Object.notifyAll()
设置了 Timeout 参数的 Thread.join() 方法时间结束 / 被调用的线程执行完毕
LockSupport.parkNanos() 方法-
LockSupport.parkUntil() 方法-# 死亡(Terminated)可以是线程结束任务之后自己结束,或者产生了异常而结束。

著作权归@pdai所有原文链接:https://pdai.tech/md/java/thread/java-thread-x-thread-basic.html

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表