线程的状态

导入:

“就绪”和“阻塞”是针对系统层面上的线程状态,即在PCB上

(一)、Java中细分的状态。

在这里插入图片描述

public static void main(String[] args) {
        for (Thread.State state:Thread.State.values()){
            System.out.println(state);
        }
    }
    输出:NEW
         RUNNABLE
         BLOCKED
         WAITING
         TIMED_WAITING
         TERMINATED

(二)、详解

(1)、New :创建状态

  **把Thread 对象创建好了,但没有调用start。**

(2)、RUNNABLE:就绪状态

  **随时可以调度到CPU上,例如代码中没有sleep大概率处于就绪状态**

(3)、TERMINATED:完毕状态

   **线程已经执行完毕,销毁了,但是Thread对象还存在。**
public static void main(String[] args) {
        Thread t=new Thread(()->{
            for (int i = 0; i < 1000_0000; i++) {
            }
        },"李四");
        System.out.println(t.getName()+":"+t.getState());
        t.start();
        while (t.isAlive()){
            System.out.println(t.getName()+":"+t.getState());
        }
        System.out.println(t.getName()+":"+t.getState());
    }
}
输出:
李四:NEW
李四:RUNNABLE
李四:RUNNABLE
李四:RUNNABLE
李四:RUNNABLE
李四:RUNNABLE
李四:RUNNABLE
李四:RUNNABLE
李四:TERMINATED

(4)、TIMED_WIATING:阻塞状态

 **代码中使用了sleep()或者join (超时)进入阻塞状态。**

(5)、BLOCKED:阻塞状态

 代码中使用了Synchornized( ),进入阻塞状态

(6)、WIATING:阻塞状态

 代码中使用了wait()进入阻塞状态

例如以下情况(一)

public static void main(String[] args) {
        final Object object = new Object();
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (object) {
                    while (true) {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();

                        }
                    }
                }
            }
        },"t1");
        t1.start();
        Thread t2=new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (object){
                    System.out.println("hehe");
                }
            }
        },"t2");
        t2.start();
    }

情况(二)

 public static void main(String[] args) {
        final Object object = new Object();
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (object) {
                    while (true) {
                        try {
                            object.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();

                        }
                    }
                }
            }
        },"t1");
        t1.start();
        Thread t2=new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (object){
                    System.out.println("hehe");
                }
            }
        },"t2");
        t2.start();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值