zoukankan      html  css  js  c++  java
  • 线程状态转换

    一、线程状态转换

    新建(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)

    可以是线程结束任务之后自己结束,或者产生了异常而结束。

    来源:https://github.com/CyC2018/CS-Notes/tree/master/notes

  • 相关阅读:
    Java 开发环境配置
    JDBC数据批处理
    knockout.js简单实用教程1
    angular 入门教程1
    knockout简单实用教程3
    knockout简单实用教程2
    autofac使用笔记
    MVC WEB api 自动生成文档
    Unity IOC注入详细配置(MVC,WebApi)
    为什么php往mongo里插入整型数字8,变成了numberint(8)
  • 原文地址:https://www.cnblogs.com/AnXinliang/p/9875328.html
Copyright © 2011-2022 走看看