精华内容
下载资源
问答
  • java 线程 状态

    2016-08-16 10:21:06
    java 线程 状态

    java线程的五种状态,即线程的生命周期

    1.开始状态   :

    当使用new 关键字,创建出一个Thread类或其子类的时候,我们都知道,这个时候会在堆空间分配空间,这个时候线程实例 开始创建,即进入开始状态。

    2.可运行状态/就绪状态:

    当调用创建出来的Thread实例的start()方法的时候,我的理解,该线程已经启动,即告诉虚拟机,我现在拥有了使用CPU时间片段的权利,这个时候和别的线程一起等待CPU调度。

    3.运行状态:

    经过就绪状态的等待,终于等到了CPU时间段的使用,那在这段有CPU使用权的时间,这个线程要做什么呢,开始运行run()方法

    4.阻塞状态:

    阻塞状态是该线程因为一些原因放弃了CPU使用权的原因,转而进去就绪状态,只有在就绪状态进行等待之后重新获取CPU使用权后才能再次进入运行状态

    阻塞情况分为三种:

    1)等待阻塞:该线程运行wait()方法之后,JVM会将该线程放入等待池中。

    2)同步阻塞:该线程获取对象的同步锁的时候,这个对象的同步锁正在被其他线程占用,这个时候JVM会将该线程放入锁池中。

    3)其他阻塞:该线程运行sleep()方法,或者其他线程在该线程调用join()方法的时候,JVM将该线程置为阻塞状态

    5.死亡状态:

    线程执行完或者因为异常结束run()方法,即进入死亡状态,生命周期结束。

    展开全文
  • Java线程状态

    2019-10-22 11:05:32
    Java线程状态(非操作系统线程状态) java线程状态分为六种,分别是NEW,RUNNABLE,BLOCKED,WAITING,TIME_WAITING和TERMINATED,六种状态可以从Thread$State类看到具体的描述信息,个人理解的各种状态解释如下: NEW ...

    Java线程状态(非操作系统线程状态)

    java线程状态分为六种,分别是NEW,RUNNABLE,BLOCKED,WAITING,TIME_WAITING和TERMINATED,六种状态可以从Thread$State类看到具体的描述信息,个人理解的各种状态解释如下:

    NEW

    新建状态,源码中解释为Thread state for a thread which has not yet started,意思就是线程还没有进入运行的状态,也就是可以理解为,代码中刚把线程new好还没有调用run方法的时候的状态,但是此状态非操作系统线程状态的就绪状态。

    RUNNABLE

    运行状态,源码的总结为Thread state for a runnable thread,即现在线程进入了可运行状态,但是值得注意的是,操作系统中线程的就绪状态和运行中状态,在java线程中均对应为RUNNABLE状态,也就是说,一个处于RUNNABLE状态的线程,它可能并未被操作系统真正在执行中,他可能由于时间片用完处于就绪状态。

    BLOCKED

    阻塞状态,线程进入同步代码块或者同步方法的时候或者在同步代码块里面调用Object.wait,进入阻塞状态,获得锁之后会退出阻塞状态。

    WAITING

    等待状态,线程调用了Object.wait之类的等待方法会使线程进入等待状态,具体方法看下面状态图

    TIME_WAITING

    超时等待状态,可以简单理解为带时间的WAITING状态,等待超过指定时间后,线程会重新进入运行。

    TERMINATED

    终止状态,线程运行完毕。

    java线程状态切换状态图

    展开全文
  • java线程状态

    2019-10-13 21:52:41
    可运行线程的线程状态,等待CPU调度 Blocked 线程阻塞等待监视器锁定的线程状态 Waiting 等待线程的线程状态。 Timed Waiting 具有指定等待时间的线程状态 Terminated 终止线程的线程状...

    java在java.lang.Thread定义了java的六种状态

    New 尚未启动的线程的线程的状态
    Runnable 可运行线程的线程状态,等待CPU调度
    Blocked 线程阻塞等待监视器锁定的线程状态
    Waiting 等待线程的线程状态。
    Timed Waiting 具有指定等待时间的线程状态
    Terminated 终止线程的线程状态

     

     

     

     

     

     

     

    这六种状态的转化关系

    展开全文
  • JAVA线程状态

    2017-02-20 22:38:52
    java线程定义了6种状态,这些状态定义在Thread类的内部枚举类,分别定义了6种状态如下:线程的状态 NEW 至今尚未启动的线程处于这种状态。 RUNNABLE 正在 Java 虚拟机中执行的线程处于这种状态。 可运行线程的...

    java线程定义了6种状态,这些状态定义在Thread类的内部枚举类,分别定义了6种状态如下:

    线程的状态

    • NEW 至今尚未启动的线程处于这种状态。
    • RUNNABLE 正在 Java 虚拟机中执行的线程处于这种状态。

      可运行线程的线程状态。处于可运行状态的某一线程正在 Java 虚拟机中运行,但它可能正在等待操作系统中的其他资源,比如处理器。

    • BLOCKED 受阻塞并等待某个监视器锁的线程处于这种状态。

      受阻塞并且正在等待监视器锁的某一线程的线程状态。处于受阻塞状态的某一线程正在等待监视器锁,以便进入一个同步的块/方法,或者在调用Object.wait 之后再次进入同步的块/方法。

    • WAITING 无限期地等待另一个线程来执行某一特定操作的线程处于这种状态。

      某一等待线程的线程状态。某一线程因为调用下列方法之一而处于等待状态:
      不带超时值的 Object.wait
      不带超时值的 Thread.join
      LockSupport.park
      处于等待状态的线程正等待另一个线程,以执行特定操作。 例如,已经在某一对象上调用了 Object.wait() 的线程正等待另一个线程,以便在该对象上调用 Object.notify() 或 Object.notifyAll()。已经调用了 Thread.join() 的线程正在等待指定线程终止。

    • TIMED_WAITING 具有指定等待时间的某一等待线程的线程状态,相对于WAITING,添加了等待的时间。

      某一线程因为调用以下带有指定正等待时间的方法之一而处于定时等待状态:
      Thread.sleep
      带有超时值的 Object.wait
      带有超时值的 Thread.join
      LockSupport.parkNanos
      LockSupport.parkUntil

    • TERMINATED 已退出的线程处于这种状态。线程已经结束执行。

    BLOCKED和WAITING/TIMED_WAITING的区别

    知乎上面有很形象的答案
    作者:赵老师
    链接:https://www.zhihu.com/question/27654579/answer/128050125
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    假设t1,t2先后两个线程,都执行如下代码:
    synchronized(Obj) {
    Obj.wait();
    }

    t1先进,最后在Obj.wait()下卡住,这时java管t1的状态waitting状态t2后进,直接在第一行就卡住了,这时java叫t2为blocked状态。请注意,blocked是过去分词,意味着他是被卡住的(无辜啊,全是泪)。因为这段代码只让一条线程运行。同时,jvm是知道怎么结束blocked的,只要别的线程退出这段代码,他就会自动让你进去。也就是说别的线程无需唤醒你,由jvm自动来干。而waiiting是说我调用wait()等函数,主动卡住自己(我在等一个白富美),请jvm在满足某种条件后(白富美发消息让我们晚上见),比如另条线程调用了notify()后,把我唤醒。这个唤醒的责任在于别的线程(白富美)明确的调用一些唤醒函数。做这样的区分,是jvm出于管理的需要,做了这种区分,比如两个原因的线程放两个队列里管理,如果别的线程运行出了synchronized这段代码,我只需要去blocked队列,放个出来。而某人调用了notify(),我只需要去waitting队列里取个出来。P.S.
    从linux内核来看,这些线程都是等待状态,没区别,区别只在于java的管理需要。通常我们在系统级别说线程的blocked,是说线程操作io,被暂停了,这种线程由linux内核来唤醒(io设备报告数据来了,内核把block的线程放进可运行的进程队列,依次得到处理器时间),而wait是说,等待一个内核mutex对象,另个线程signal这个mutex后,这个线程才可以运行。区别在于由谁唤醒,是操作系统,还是另一个线程,这里倒和java很相似。

    总结起来就是:

    Blocked是在等待线程获取锁,是被动的阻塞;waiting或者timed_waiting是在等待其它线程发来通知(调用Thread类的notify()/notifyAll()方法),收到通知后就可能进入runnable状态或者进入重新获取锁的竞争,如果竞争失败进入Blocked状态

    展开全文
  • Java 线程状态

    2018-04-04 15:02:57
    线程在运行的生命周期中可能处于下列6种状态的一种,在某一时刻,线程只能处于其中的某一个状态,Thread.State中定义了这六种状态 public enum State { /** * 初始状态:线程被创建,... * 运行状态java线程...
  • java 线程状态

    2015-03-19 21:54:16
    java thread的运行周期中, 有几种状态, 在 java.lang.Thread.State 中有详细定义和说明: NEW 状态是指线程刚创建, 尚未启动 RUNNABLE 状态线程正在正常运行中, 当然可能会有某种耗时计算/IO等待的操作/CPU时间...
  • java线程状态——java线程状态

    千次阅读 2017-02-14 17:03:08
    java线程状态图,网上有很多资源,无外乎两种,如下: 图一 图二 图二是比较多的,可以看出来我贴出的链接这个博主挺有心的,还把右下角的水印给抹去了,赤裸裸的伪原创心理呀。 还有几张图说的也挺不错的,链接...
  • 清楚的理解和认知线程状态是java多线程的基础,多线程本质上其实就是管理多个线程的状态,以期在保证线程安全的情况下获得最佳的运行效率(发挥cpu的最佳效能) 首先列举几个容易混淆的线程状态...java线程状态: ...
  • Java线程状态详解

    2019-02-26 11:02:03
    Java线程状态详解 一. 背景 最近在深入研究Java并发编程,看到网上有很多关于线程状态的总结,有的不全面,有的根本就是错的。因此,在这里我结合最权威的Java源代码,尝试对Java线程状态进行一个详细的解读。 二. ...
  • Java线程状态及转换

    2020-02-14 20:44:33
    Java线程状态及切换 原文地址 Java线程状态和关闭线程的正确姿势 正文 Java中的线程有六种状态,使用线程Thread类的枚举类来实现,如下,我对每个状态都进行了一定的解释。 public enum State { /** 表示一个线程还...
  • Java 线程状态、线程池

    热门讨论 2020-03-03 20:19:11
    java 线程状态、线程池 1. java线程状态 状态 发生条件 NEW 线程刚刚被创建,没有启动,没有调用start方法 RUNNABLE(可运行) 线程已经在JVM中运行,但是是否运行不确定,看当前线程是否由CPU执行权 ...
  • java线程状态转换

    2018-07-19 09:57:38
    图中所示为java线程状态转换简版, 图下为java线程状态转换详版     本来还想做个更详细的讲解,但是发现网上竟然有这么详细的讲解,我也就不继续写了,想要更详细的了解,可以去了解...
  • java线程状态——死锁

    千次阅读 2017-02-14 17:11:31
    java线程状态——java线程状态图 死锁,概念有很多,可以google 现在列出死锁的模拟代码和jstack的输出 一方面是理解死锁,一方面是学习jstack找出死锁,进行代码调优 import java.util.concurrent.TimeUnit; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,500
精华内容 11,400
关键字:

java线程状态

java 订阅