当前位置:首页 » 《随便一记》 » 正文

【Java】线程的状态

19 人参与  2024年04月20日 17:10  分类 : 《随便一记》  评论

点击全文阅读


在这里插入图片描述
在之前的文章中,已经介绍了关于线程的基础知识。

我的主页: ???爱吃南瓜的北瓜

文章目录

✍绪论?1.NEW?2.TERMINATED?3.RUNNABLE--------------------?4.WAITING?5.TIMED_WAITING?6.BLOCKED

✍绪论

线程主要包括如下六种状态

在这里插入图片描述

在任意一个时间点,一个线程只能有且只有其中的一种状态,这6种状态分别如下:

NEW: 安排了⼯作, 还未开始⾏动

创建后尚未启动的线程处于这种状态

RUNNABLE: 可⼯作的. ⼜可以分成正在⼯作中和即将开始⼯作.

调用start()方法,RUNNABLE包括了操作系统线程状态中的Running和Ready,也就是处于此状态的线程有可能正在执行,也有可能正在等待着CPU为它分配执行时间(该线程已经获取了除CPU资源外的其他资源,等待获取CPU 资源后才会真正处于运行状态)。

BLOCKED: 这⼏个都表⽰排队等着其他事情

线程被阻塞了,“阻塞状态”与“等待状态”的区别是:“阻塞状态”在等待着获取到一个排他锁,这个事件将在另外一个线程获得锁的时候可能发生,比如synchronized之外;而“等待状态”则是在获得锁之后,主动释放锁,进入等待一段时间,或者等待唤醒动作的发生。

WAITING: 这⼏个都表⽰排队等着其他事情

处于这种状态的线程不会被分配CPU执行时间,它们要等待被其他线程显式地唤醒。以下方法会让线程陷入无限期的等待状态:

TIMED_WAITING: 这⼏个都表⽰排队等着其他事情

处于这种状态的线程也不会被分配CPU执行时间,不过无须等待被其他线程显式地唤醒,在一定时间之后它们会由系统自动唤醒。以下方法会让线程进入限期等待状态:

TERMINATED: ⼯作完成了.

已终止线程的线程状态,线程已经结束执行。

?1.NEW

创建了线程t 但是还未start,获取线程状态
就是NEW

  public static void main(String[] args) {        Thread t = new Thread(()->{            System.out.println("hello ");        });        System.out.println(t.getState());        t.start();    }

在这里插入图片描述

?2.TERMINATED

表示线程已经终止了
内核中线程已经销毁了

 public static void main(String[] args) throws InterruptedException {        Thread t = new Thread(()->{            System.out.println("hello ");        });        System.out.println(t.getState());        t.start();        t.join();        //加入join()是为了确保t执行完毕,获取t的状态        System.out.println(t.getState());    }

在这里插入图片描述

?3.RUNNABLE

就绪状态
有两种可能

这个线程正在CPU上执行这个线程虽然不在CPU上执行,但是随时可以调度到CPU上执行。

这两种情况,没必要分清楚到底是那种情况。

--------------------

WAITING,TIMED_WAITING,BLOCKED
这三种都是阻塞
不过产生阻塞的原因不同

?4.WAITING

死等进入阻塞

?5.TIMED_WAITING

带有超时时间的阻塞

public static void main(String[] args) throws InterruptedException {        Thread thread = new Thread(()->{          while (true){              System.out.println("hello thread");              try {                  Thread.sleep(1000);              } catch (InterruptedException e) {                  throw new RuntimeException(e);              }          }        });        thread.start();        thread.join();        //thread.join(60000);    }

在这里插入图片描述

?6.BLOCKED

带有锁竞争的阻塞

  public static void main(String[] args) {        Object locker = new Object();        Thread t1 = new Thread(()->{            synchronized (locker){                System.out.println("t1线程开始");                try {                     Thread.sleep(1000);                } catch (InterruptedException e) {                    throw new RuntimeException(e);                }                System.out.println("t1线程结束");            }        });        Thread t2 = new Thread(()->{            synchronized (locker){                System.out.println("t2线程开始");                                System.out.println("t2线程结束");            }        });        t1.start();        t2.start();    }

使⽤ jconsole 可以看到 t1 的状态是 TIMED_WAITING , t2 的状态是 BLOCKED

修改代码,将t1中的sleep换成wait

 public static void main(String[] args) {        Object locker = new Object();        Thread t1 = new Thread(()->{            synchronized (locker){                System.out.println("t1线程开始");                try {                    locker.wait();                } catch (InterruptedException e) {                    throw new RuntimeException(e);                }                System.out.println("t1线程结束");            }        });        Thread t2 = new Thread(()->{            synchronized (locker){                System.out.println("t2线程开始");                System.out.println("t2线程结束");            }        });        t1.start();        t2.start();    }

使⽤ jconsole 可以看到 t1 的状态是 WAITING

结论

BLOCKED 表⽰等待获取锁, WAITING 和 TIMED_WAITING 表⽰等待其他线程发来通知.TIMED_WAITING 线程在等待唤醒,但设置了时限; WAITING 线程在⽆限等待唤醒

以上就是本文所有内容,如果对你有帮助的话,点赞收藏支持一下吧!???


点击全文阅读


本文链接:http://zhangshiyu.com/post/98166.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 终章小说重生七零,彪悍军嫂是朵黑莲花完结篇(武天娇傅长卿)已更新+延伸(重生七零,彪悍军嫂是朵黑莲花)清爽版
  • 作精丈夫第一百次提离婚后我搞垮了他的公司未删减_顾辞周言小姑娘免费赏析_小说后续在线阅读_无删减免费完结_
  • 独家苏玉宁闻君尧:结局+番外精编之作(闻君尧苏玉宁)电子书畅享阅读
  • 因为我家猫出车祸,我将北大改成大专后续+完结_夏夏黄知夏爸爸妈妈独家番外_小说后续在线阅读_无删减免费完结_
  • 顾北域慕嬨小说完本(顾北域慕嬨)(慕嬨顾北域)前传+整本阅读全新作品预订
  • 我五感尽失后,自称与动物共感的男友青梅慌了新书_橙橙青梅陈奕内容精选_小说后续在线阅读_无删减免费完结_
  • 闻君尧苏玉宁彩蛋小说结尾+附加(苏玉宁闻君尧)清爽版阅读
  • 鲁正熠潘素雯:+后续热血十足潘素雯鲁正熠:结局+番外评价五颗星
  • 我拒绝入学清北后,校花疯了优质全文_苏沈雅通知书天骄热文_小说后续在线阅读_无删减免费完结_
  • 终章小说冷窈妲(穿成炮灰女配还要我去攻略仇敌):结局+番外评价五颗星
  • 全书浏览升学宴上,女儿被毒死(苏青黛陆仁青青)_升学宴上,女儿被毒死(苏青黛陆仁青青)全书结局
  • 升学宴上,女儿被毒死苏青黛陆仁青青完本_升学宴上,女儿被毒死(苏青黛陆仁青青)

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1