专栏首页好派笔记线程的状态分为几种
原创

线程的状态分为几种

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

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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java线程的几种状态

    java.lang.Thread.State中定义的集中Java线程的状态: 1 /** 2 * A thread state. A thread c...

    欠扁的小篮子
  • Java 线程的六种状态

    进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。

    Jacob丶
  • Java 线程的 5 种状态

    1. 新建状态(New): 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。

    allsmallpig
  • 线程和线程池的几个状态值

    在java中线程池的实现的主类是通过ThreadPoolExcutor这个类来实现的, 线程池运行的状态,并不是用户显式设置的,而是伴随着线程池的运行,由内部...

    居士
  • 线程的六种状态转换

    New的意思是当前线程新建出来但没有启动,比如新建一个线程时new Thread(),此时线程就处于New状态,如果线程调用的了start()方法,此时线程开始...

    笑凡尘
  • 线程的5种状态详解

    飞狗
  • Java线程的6种状态及切换

    http://static.cyblogs.com/20181120173640764.jpg

    chengcheng222e
  • 【Java】基础35:线程池与线程的六种状态

    所以后来有了改进,现在临时票在出地铁站时会被回收,回收之后又能被其他人使用,这样资源就被重复利用起来了。

    刘小爱
  • java中线程有多少种状态

    新建 (new或born) : 马克-to-win: new出线程对象,还没start呢, 处于新建状态

    马克java社区
  • SQL线程状态分析:processlist

    我们已经写了很多 MySQL 的文章了,比如索引优化、数据库锁、主从复制等等。今天在来和大家学习一个优化方法:show processlist——查看当前所有数...

    公众号 IT老哥
  • java多线程——线程的状态

    用户1665735
  • 进程的五种状态

    每个运行态进程会被分配一个调用栈,即内存中的一组寄存器。 所以进程是否执行,就看其是否入栈。 程序的运行过程实际上就是CPU维护调用栈。

    JNingWei
  • Thrift线程和状态机分析

    启动Thrift时,可启动两类线程,一是TNonblockingIOThread,另一是Worker:

    一见
  • SAP Netweaver后台作业的几种状态

    所有的background job都是由background processor执行的,如果你在SM50里面看到当前没有free的BGP了,那么你的job只能在...

    Jerry Wang
  • 线程的基本状态

    1、新建状态(New):新创建了一个线程对象。 2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可...

    shimeath
  • Java线程Thread的状态解析以及状态转换分析 多线程中篇(七)

    在Thread类中有内部类 枚举State,用于抽象描述Java线程的状态,共有6种不同的状态

    noteless
  • 为什么 Java 线程没有 Running 状态?

    Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事。具体而言,这里说的 Java 线程状态均来自于 Thread 类下的 Stat...

    Java技术栈
  • ABAP后台作业(background job)的几种状态

    Subject: possible status of your background job

    Jerry Wang
  • ABAP后台作业(background job)的几种状态

    Subject: possible status of your background job

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券