栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 线程的6种状态

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 线程的6种状态

Java 线程的6种状态 不同于系统线程的5种状态,Java线程的6种状分别为
  • 创建
    • NEW
  • 运行
    • RUNNABLE
    • BLOCKED
    • WAITING
    • TIMED_WAITING
  • 结束
    • TERMINATED
系统API文档


具体的例子

NEW
线程被创建,但是没有运行

//初始化一个对象,但是没有调用start()方法
       Thread thread1 =new Thread("t1"){
           @Override
           public void run() {
               System.out.println("running......");
           }
       };

       System.out.println("T1 的状态是: "+ thread1.getState());

RUNNABLE
存在java虚拟机中,等待系统资源(比如CPU调度)其实就是正常运行
运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“RUNNABLE”,此时有可能分配了时间片,也有可能没有分配时间片.

 //java 将 ready和running两种状态笼统的称为RUNNABLE
        Thread thread2 =new Thread("t2"){
            @Override
            public void run() {

                while (true){
                }
            }
        };
        thread2.start();
        System.out.println("T2 的状态是: "+thread2.getState());

TERMINATED
线程生命周期结束,run方法之后自动释放

//线程结束自动结束
        Thread thread3 =new Thread("t3"){
            @Override
            public void run() {
            
            }
        };
        thread3.start();

BLOCKED 阻塞
凡是涉及到锁 的,大概率是BLOCK状态。
比如线程1等待线程2 释放锁

 //6. 阻塞(BLOCKED):表示线程阻塞于锁。两个线程抢占同一个锁,没抢到锁的线程就会进行BLOCKED状态.
        //代码解释:线程6和线程4有一个共同的特点就是给ThreadState.class进行了加锁,线程4的执行时间比较长,锁被线程4掌握, 这个时候线程6就会拿不到锁也就进人了BLOCKED状态
        Thread thread6 =new Thread("t6"){

            @Override
            public void run() {
                synchronized (example.class){

                    try {
                        Thread.sleep(909090);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }

            }
        };
        thread6.start();

WAITING
进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)
比如调用另一个线程的join方法

//5. 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)
        Thread thread5 =new Thread("t5"){

            @Override
            public void run() {

                try {
                    thread2.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        thread5.start();

TIMED_WAITING
比如使用Thread.sleep(100000)使线程休眠了很久
它可以在指定的时间后自行返回

//超时等待(TIMED_WAITING) 可以在指定的时间自动返回
        Thread thread4 =new Thread("t4"){

            @Override
            public void run() {
                synchronized (example.class){

                    try {
                        Thread.sleep(9999999);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        thread4.start();

运行结果

图文理解


yield 和join的区别

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/993205.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号