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

    线程的状态
    #

      首先贴出JDK6中线程的6种状态(注意:JDK8中的定义也没有变化)

    线程的状态

    新建(New)

      当用new操作符创建一个线程时, 例如new Thread(r),线程还没有开始运行,此时线程处在新建状态。此时还没有开始运行线程中的代码。

    可运行(Runable)

      一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当start()方法返回后,线程就处于就绪状态。
      Runable包括了操作系统线程状态中的Running和Ready,也就是处于此状态的线程有可能正在执行,也有可能正在等待着CPU为它分配执行时间。线程进人Runnable状态大体分为如下5种情况:

    • 调用sleep()方法,达到指定休眠时间返回。
    • 线程调用的阻塞IO已经返回,阻塞方法执行完毕。
    • 线程成功地获得了请求的对象锁。
    • 线程正在等待某个通知,其他线程发出了通知。
    • 处于挂起状态的线程调用了 resume恢复方法。

    阻塞(Blocked)

      线程被阻塞了,“阻塞状态”与“等待状态”的区别是:“阻塞状态”一般在等待着获取到一个排他锁,这个事件将在另外一个线程放弃这个锁的时候发生;而“等待状态”则是在等待一段时间,或者等待唤醒动作的发生。在程序等待进入同步区域的时候,线程将进入这种阻塞状态。

    无限期等待(Waiting):

      处于这种状态的线程不会被分配CPU执行时间,它们要等待被其他线程显式地唤醒。某一线程因为调用下列方法之一而处于等待状态:

    • 不带超时值的 Object.wait ()
    • 不带超时值的 Thread.join ()
    • LockSupport.park ()

    限期等待(Timed Waiting):

      处于这种状态的线程也不会被分配CPU执行时间,不过无须等待被其他线程显式地唤醒,在一定时间之后它们会由系统自动唤醒。以下方法会让线程进入限期等待状态:

    • 设置了sleeptime参数的Thread.sleep()方法;
    • 设置了Timeout参数的Object.wait()方法;
    • 设置了Timeout参数的Thread.join()方法;
    • LockSupport.parkNanos()方法;
    • LockSupport.parkUntil()方法。

    结束(Terminated):

      已终止线程的线程状态,线程已经结束执行。可以看停止线程的方式

  • 相关阅读:
    详细介绍Linux shell脚本基础学习(二)
    MySQL主从复制
    推荐一款好用的jquery弹出层插件——wbox
    Jenkins安装插件下载失败
    如何在 Amazon RDS 中部署 MySQL 数据库实例
    VMware vSphere 6 Enterprise Plus 永久激活许可证亲测可用
    使用 convert database 命令进行 RMAN 跨平台迁移(12C>19C)
    hbase用户授权
    hbase move region
    hbase表集群间数据同步 hbase replication
  • 原文地址:https://www.cnblogs.com/xzwblog/p/7235187.html
Copyright © 2011-2022 走看看