线程有哪些状态?

Posted z啵唧啵唧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程有哪些状态?相关的知识,希望对你有一定的参考价值。

线程的状态在Java层面和操作系统的层面略有不同,下面从Java和操作系统两个层面来看

Java线程分为六种状态

  • NEW 新建状态

处在新建状态的线程还没有和操作系统底层的线程关联起来,只能说是一个刚刚new出来的对象

  • RUNNABLE 可运行状态

可运行状态就是说是新建状态的线程调用了start方法之后,就进入了这个可运行状态,可运行状态的线程才和操作系统底层的线程进行关联

  • TERMINATED 终止状态

当该线程执行的代码执行完毕之后,就进入这个终结状态

  • BLOCKED 阻塞状态

阻塞状态就是说多个线程共同访问一个共享资源的时候,是通过获取锁来获取访问资源的权力的,当获取锁失败之后就会进入到这个阻塞状态,当然处在阻塞状态的线程还是可以争抢锁的,当它获取到锁的时候就从阻塞状态转变为可运行的状态

  • WAITING 等待状态

等待状态是这样的,当线程获取锁成功之后,但是因为一些原因不能够继续执行,就会通过调用wait方法然后就进入到这个等待的状态,处在等待状态的线程,调用notify方法的时候就从这个等待状态回到可运行的状态

  • TIMED_WAITING 有时限的等待状态

有时限的等待状态和等待状态原理类似,只不过就是添加了一个等待的实现,原先普通的等待状态只有在调用了notify方法之后才会重回到可运行的状态,但是有时限的等待状态,在时间到了之后还没有被唤醒也会自动唤醒重回到可运行的状态
进入有时限的等待状态可以调用带参的wait(long)方法,并且还可以调用sleep(long)方法

  • Java层面线程状态转换图

操作系统层面分为五个状态

  • 操作系统层面将Java层面的可运行状态拆分成为两个状态,一个是就绪状态,一个是运行状态
  • 将Java中的阻塞,等待,有时限等待统一称为阻塞状态
  • 新建状态

线程刚被创建出来,还不具备分配到CPU时间片的能力

  • 就绪状态

新建状态的线程调用start方法后,线程进入的状态,此时线程具备抢夺cpu时间片的能力

  • 运行状态

当线程分配到cpu时间片的时候,就进入运行状态,执行相关的代码

  • 阻塞状态

线程在执行的过程遇到一些阻塞时间进入的状态

  • 终止状态

线程任务执行完毕就会进入这个终结状态

  • 操作系统层面线程状态转换图

以上是关于线程有哪些状态?的主要内容,如果未能解决你的问题,请参考以下文章

Java 线程(JVM 层面)的生命周期

线程有哪些状态

40 线程有哪些状态?

线程的状态都有哪些

线程的状态有哪些,线程中的start与run方法的区别

Java千百问_01基本概念(007)_线程的状态有哪些