美文网首页
线程的六种状态转换

线程的六种状态转换

作者: 笑疯子 | 来源:发表于2020-10-21 09:58 被阅读0次

线程的六种状态

同一时间线程只能处于一种状态

  • New新创建
  • Runnable可运行
  • Blocked被阻塞
  • Waiting等待
  • Timed Waiting计时等待
  • Terminated被终止

获取当前线程状态

可以使用线程的getState()获取当前线程的状态

Thread thread = new Thread();
System.out.println(thread.getState());

新建状态(New)

New的意思是当前线程新建出来但没有启动,比如新建一个线程时new Thread(),此时线程就处于New状态,如果线程调用的了start()方法,此时线程开始执行run()下面的方法,这时候线程的状态也就会从New变成Runnable状态。

可运行状态(Runnable)

在Java中,Runnable状态分为两种,一种是可能没有运行,正在等待CPU调度资源分配给线程使用,另外一种是已经正在运行。假设A线程正在执行,跑到一半分配的CPU资源被调度走做了别的事情,那么此时该线程会暂时不运行,等待重新分配CPU资源,这个时候线程的状态还是RUnnable状态不会做出改变。

阻塞状态(Blocked)

线程从RUnnable状态变成Blocked状态只有一种途径,就是当线程进入到synchronized没有拿到当前代码块对应的monitor锁,这个时候线程就会进入到Blocked状态。

等待状态(Waiting)

线程从Runnable进入Waiting有以下三种情况:

  • 线程调用了没有设置Timeout参数的Object.wait()方法。
  • 线程调用了没有设置Timeout参数的Thread.join()方法。
  • 线程调用了LockSupport.park()方法。

Blocked状态是针对synchronizedmonitor锁的,但是java中有很多种锁,例如:ReentrantLock。在这些锁中,如果线程没有获取到锁,就会直接进去Waiting状态,其实本质就是调用了LockSupport.park(),进入到Waiting状态。

BlockedWaiting 区别:

  • Blocked等待其它线程释放monitor锁。
  • Waiting是等待其它条件,例如join()执行结束,或者是notify()notifyAll()

计时等待(Timed Waiting)

Waiting是一样的。

线程进入到Timed Waiting状态有以下四种情况:

  • 线程调用了设置时间参数的Thread.sleep(long millis)方法。
  • 线程调用了设置时间参数的Object.wait(long timeout)方法。
  • 线程调用了设置时间参数的Thread.join(long millis)方法。
  • 线程调用了设置时间参数的LockSupport.parkNanos(long nanos)LockSupport.parkUntil(long deadline)方法。

线程终止(Terminated)

线程进入到Terminated有两种情况:

  • run()方法中代码执行完毕,正常退出。
  • 出现没有捕获的异常,终止的run()方法,意外退出。

流程图

流程图

图片原文:传送门

原文发布在:传送门

相关文章

  • 线程问题怎么排查

    线程状态的定义 可见在 JDK 中定义的线程状态总共六种,各状态在特定条件下可以转换,其组成了一个线程的生命周期,...

  • 线程的六种状态转换

    线程的六种状态 同一时间线程只能处于一种状态 New新创建 Runnable可运行 Blocked被阻塞 Wait...

  • java多线程

    线程六种状态 New:尚未启动的线程的线程状态(new Thread) Runnable:可运行线程的线程状态,等...

  • 并发编程——Java线程的6种状态及切换

    前言 本次主要分享一下Java线程的六种状态及其转换。 如果对于线程的创建方式不太了解,推荐观看并发编程——认识j...

  • 线程的生命周期及其六种状态的转换

    线程的六种状态 线程的生命周期主要有以下六种状态: New(新创建) Runnable(可运行) Blocked(...

  • 线程的六种状态

    线程一共有六种状态NEW(新建状态:线程被创建没有调用start())RUNNABLE(运行状态:Java线程把操...

  • 并发编程(三):线程状态

    线程状态 现在线程的状态有五种和六种,五种是以操作系统层面描述的,六种是以Java Thread State枚举描...

  • Java 线程的七种状态

    本篇感性地介绍一下 Java 线程的七种状态以及状态之间的转换 Java 线程状态转换图 Java 线程状态 在 ...

  • 并发总结(三)关于线程状态

    (一) 线程共有六种状态 (二)与锁相关的线程状态 2.1 当线程在对象的锁池中竞争锁时,状态为 BLOCKED ...

  • java中的线程Thread(2)

    进入后面章节学习之前,我们继续了解线程相关概念。 线程状态说明及对应枚举类 线程的六种状态: NEW:新建状态,线...

网友评论

      本文标题:线程的六种状态转换

      本文链接:https://www.haomeiwen.com/subject/puodmktx.html