多线程基础-线程状态

一、线程状态

1.NEW
2.RUNNABLE(READY/RUNNING)
3.WAITING
4.TIMED WAITING
5.BLOCKED
6.TERMINATED

关系图:
在这里插入图片描述
二、代码演示状态

public class StateDemo {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            while(true) {
                // RUNNABLE
                if(Thread.currentThread().isInterrupted()) {
                   break;
                }
            }
            // 复位
            Thread.interrupted();
            try {
                // 睡
                synchronized (StateDemo.class) {
                    // WAITING
                    StateDemo.class.wait();
                }
            } catch (InterruptedException e) {
                // 被打断了不做事
            }
            // TIMED_WAITING
            sleep(5);
            // 复位
            Thread.interrupted();
            sleep(5);
            // BLOCKED
            synchronized (StateDemo.class) {
                while(true) {
                    if(Thread.currentThread().isInterrupted()) {
                        break;
                    }
                }
            }
            // TERMINATED
        });
        System.out.println("线程状态1:"+t1.getState());
        // 启动线程
        t1.start();
        sleep(1);
        System.out.println("线程状态2:"+t1.getState());
        // 打断
        t1.interrupt();
        sleep(1);
        System.out.println("线程状态3:"+t1.getState());
        // 唤醒
        sleep(1);
        synchronized (StateDemo.class) {
            StateDemo.class.notify();
        }
        sleep(1);
        System.out.println("线程状态4:"+t1.getState());
        t1.interrupt();
        // 开启第二个线程抢锁
        Thread t2 = new Thread(() -> {
            synchronized (StateDemo.class) {
                while (!Thread.currentThread().isInterrupted()) {

                }
            }
        });
        t2.start();
        sleep(1);
        t1.interrupt();
        sleep(1);
        System.out.println("线程状态5:"+t1.getState());
        sleep(1);
        // 一起打断,t1与t2都结束
        t2.interrupt();
        t1.interrupt();
        sleep(1);
        System.out.println("线程状态6:"+t1.getState());
    }

    private static void sleep(int second) {
        try {
            Thread.sleep(second*1000);
        } catch (InterruptedException e) {
            // 被打断不做事
        }
    }
}

执行结果:

线程状态1:NEW
线程状态2:RUNNABLE
线程状态3:WAITING
线程状态4:TIMED_WAITING
线程状态5:BLOCKED
线程状态6:TERMINATED
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值