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

Java 线程的几种状态

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

Java 线程的几种状态

目录

Java线程的状态

线程状态:


Java线程的状态

1.new创建态:当用new关键字创建一个线程时,还没调用start时

2.runnable可运行态:程序无法判新某个时间到底是就绪还是运行态,所以这2个状态对程序就没有意义

3.waiting等待态:处于这种状态的线程不会被分配CPU执行时间,它们要等待被显式地唤醒,否则会处于无限期等待的状态

4.timed_waiting超时等待态:处于这种状态的线程不会被分配CPU执行时间,不过无需无期限等待被其他线程显式地唤醒,在达到一定时间后它们会自动唤醒

5.bolcked阻塞态:线程在进入synchronized关键字修饰的方法或代码块(获取锁)时的状态

6.terminated销毁终止态:

  • 当线程的run()方法完成时,或者主线程的main()方法完成时,我们就认为它终止了。这个线程对象也许是活的,但是它已经不是一个单独执行的线程。线程一旦终止了,就不能复生
  • 在一个终止的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常

线程状态:

1.NEW -> RUNNABLE -> TIMED_WAITING -> RUNNABLE -> TERMINATED

public class test {
    public static void main(String[] args) throws Exception {

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("执行run(),thread线程状态:" + Thread.currentThread().getState());
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("sleep结束,thread线程状态:" + Thread.currentThread().getState());
            }
        });
        System.out.println("未调用start(),thread线程状态:" + thread.getState());
        thread.start();
        Thread.sleep(200);
        System.out.println("线程sleep,thread线程状态:" + thread.getState());
        Thread.sleep(2000);
        System.out.println("线程执行完成,thread线程状态:" + thread.getState());
    }
}

 2.NEW -> RUNNABLE -> BLOCKED -> RUNNABLE -> TERMINATED

public class test {
    private static Object lock = new Object();
    public static void main(String[] args) throws Exception {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("执行run(),thread线程状态:" + Thread.currentThread().getState());
                synchronized(lock) {
                }
                System.out.println("synchronized结束,thread线程状态:" + Thread.currentThread().getState());
            }
        });
        System.out.println("未调用start(),thread线程状态:" + thread.getState());
        synchronized(lock) {
            thread.start();
            Thread.sleep(2000);
            System.out.println("线程synchronized,thread线程状态:" + thread.getState());
        }
        Thread.sleep(2000);
        System.out.println("线程执行完成,thread线程状态:" + thread.getState());
    }
}

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

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

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