线程的状态 淩亂°似流年 2024-04-23 20:33 69阅读 0赞 > ⭐ 作者:小胡\_不糊涂 > ? 作者主页:[小胡\_不糊涂的个人主页][Link 1] > ? 收录专栏:[JavaEE][] > ? 持续更文,关注博主少走弯路,谢谢大家支持 ? #### 线程的状态 #### * 1. 线程的几种状态 * 2. 状态的转移 ![在这里插入图片描述][436152610c624205b2f50c71de902aa5.gif_pic_center] ## 1. 线程的几种状态 ## 线程的状态是一个枚举类型 `Thread.State` 执行这段代码可以观察到线程的几种状态: public static void main(String[] args) { for (Thread.State state : Thread.State.values()) { System.out.println(state); } } ![在这里插入图片描述][2018510be8b5416ab92fb156fafeaf29.png] <table> <thead> <tr> <th>线程状态</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>NEW</td> <td>初始状态,线程被构建,但是还没有调用start()方法</td> </tr> <tr> <td>RUNNABLE</td> <td>运行状态,Java线程将操作系统中的就绪和运行两种状态笼统地称作“运行中”,分为READY(就绪)、RUNNING(运行)</td> </tr> <tr> <td>BLOCKED</td> <td>阻塞状态,表示线程阻塞于锁</td> </tr> <tr> <td>WAITING</td> <td>等待状态,表示线程进入等待状态,进入该状态表示当前线程需要等待其他线程做出一些特定动作(通知或中断)</td> </tr> <tr> <td>TIME_WAITING</td> <td>超时等待状态,该状态不同于WAITING,它是可以在指定的时间自行返回的</td> </tr> <tr> <td>TERMINATED</td> <td>终止状态,表示当前线程已经执行完毕</td> </tr> </tbody> </table> 下面这张图,是这几种**状态的相互转移**的过程: ![在这里插入图片描述][dc5f282e76724437a47656924977800a.png] ## 2. 状态的转移 ## 1. NEW、RUNNABLE、TERMINATED之间的转换 public class TestDemo1 { public static void main(String[] args) { Thread thread=new Thread(()->{ for(int i=0;i<10;i++){ } },"我是一个小线程"); System.out.println(thread.getName()+":"+thread.getState()); thread.start(); //isAlive() ⽅法,可以认为只要不是 NEW 和 TERMINATED 的状态都是活着的。 while(thread.isAlive()) { System.out.println(thread.getName() + ":" + thread.getState()); } System.out.println(thread.getName()+":"+thread.getState()); } } ![在这里插入图片描述][70924f8d3b924866b8f7a5041f068ce8.png] 1. WAITING、BLOCKED、TIMED\_WAITING之间的转换 public class TestDemo1 { public static void main(String[] args) { Object loker=new Object(); Thread t1=new Thread(()->{ synchronized (loker){ try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } System.out.println(Thread.currentThread().getName()); } },"t1"); t1.start(); Thread t2=new Thread(new Runnable() { @Override public void run() { System.out.println("我是t2线程"); } }); t2.start(); } } 通过观察jconsole.exe可知,t1是处于TIMED\_WAITING状态,t2处于BLOKERED状态。 当我们修改 `Thread.sleep(1000);` 为 `loker.wait(1000);`,此时t1的状态就变为 WAITING, 直到notify将它唤醒。 结论: * BLOCKED 表示等待获取锁, WAITING 和 TIMED\_WAITING 表⽰等待其他线程发来通知 * TIMED\_WAITING 线程在等待唤醒,但设置了时限; WAITING 线程表示在⽆限等待唤醒 [Link 1]: https://blog.csdn.net/iLoyo_ [JavaEE]: http://t.csdnimg.cn/p0IQF [436152610c624205b2f50c71de902aa5.gif_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/23/84885d92a72745a197bbdbee6509b82d.gif [2018510be8b5416ab92fb156fafeaf29.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/23/e3ef6d81781a4ff0a8447ac77fa7f623.png [dc5f282e76724437a47656924977800a.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/23/130656aa09c543bba865af4febd2a628.png [70924f8d3b924866b8f7a5041f068ce8.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/23/637fb37b17514c0abdd306ca1765e00e.png
相关 线程的状态 在Java中线程共分为6中状态: 1. NEW:创建好一个Java的Thread对象,并安排好了任务,没有调用start()方法,和PCB没有关系 1. RUNNABL 缺乏、安全感/ 2024年03月30日 14:38/ 0 赞/ 52 阅读
相关 线程状态和线程池状态 线程状态 有六种状态; 新创建(NEW) 可运行(Runnable) 锁阻塞(Blocked) 无线等待(Waiting) 计时等待(Timed Wa 桃扇骨/ 2023年10月06日 14:08/ 0 赞/ 8 阅读
相关 线程的状态 ![在这里插入图片描述][2d280b0176ba4be2ae9f37daba7f7c5d.gif_pic_center] 文章目录 一、线程的所有状态 二 ﹏ヽ暗。殇╰゛Y/ 2023年09月27日 13:09/ 0 赞/ 106 阅读
相关 线程的状态 线程的状态 在正式学习Thread类中的具体方法之前,我们先来了解一下线程有哪些状态,这个将会有助于后面对Thread类中的方法的理解。 线程从创建到最终的消亡,要 Dear 丶/ 2022年09月24日 14:22/ 0 赞/ 163 阅读
相关 线程的状态 要想实现多线程,必须在主线程中创建新的线程对象。任何线程一般具有5种状态, 即 创建、就绪、运行、阻塞、终止。线程状态的转移与方法之间的关系如图所示 ![这里写图片描述][ 心已赠人/ 2022年07月21日 02:49/ 0 赞/ 197 阅读
相关 线程的状态 线程对象在不同的运行时期有不同的状态,状态信息就存在于State枚举类中, \ public static enum Thread.State extends En 秒速五厘米/ 2022年06月08日 00:46/ 0 赞/ 198 阅读
相关 线程的状态 Thread源码里定义了6种状态,如下: \ A thread state. A thread can be in one of the follo 川长思鸟来/ 2022年02月15日 13:47/ 0 赞/ 242 阅读
相关 线程的状态 线程共有六种状态 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9 妖狐艹你老母/ 2021年12月19日 00:21/ 0 赞/ 350 阅读
相关 线程的状态 RUNNABLE这个名字很具有欺骗性,很容易让人误以为处于这个状态的线程正在运行。事实上,这个状态只是表示,线程是可运行的。我们已经无数次提到过,一个单核CPU在同一时刻... 朱雀/ 2020年05月12日 15:57/ 0 赞/ 896 阅读
还没有评论,来说两句吧...