0
点赞
收藏
分享

微信扫一扫

多线程(四)线程的状态及生命周期

有点d伤 2022-03-30 阅读 56
javajava-ee

目录

🎄一,线程的状态

在这里插入图片描述

NEW: 安排了工作, 还未开始行动
RUNNABLE: 可工作的. 又可以分成正在工作中和即将开始工作.
BLOCKED: 这几个都表示排队等着其他事情
WAITING: 这几个都表示排队等着其他事情
TIMED_WAITING: 这几个都表示排队等着其他事情
TERMINATED: 工作完成了

新建(初始)

就绪(可运行)

运行

阻塞

死亡

🌸二,线程的状态转移

NEW , RUNNABLE ,TERMINATED 状态的转移

使用 isAlive 方法判定线程的存活状态

public class ThreadStateTransfer {
    public static void main(String[] args) throws InterruptedException {
        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());;
    }
}

yield() 方法,让出 CPU执行权

/**
 * yield让出CPU执行权
 */
public class ThreadYield {
    public static void main(String[] args) {
        Thread thread  = new Thread(() ->{
            Thread t1 = Thread.currentThread();
            for (int i = 0; i < 10; i++) {
                //让出CPU执行权
                Thread.yield();
                System.out.println("执行了线程" + t1.getName());
            }
        },"张三");
        thread.start();

        //创建并启动线程
        new Thread(() -> {
            Thread t1 = Thread.currentThread();
            for (int i = 0; i < 10; i++) {
                System.out.println("执行了线程" + t1.getName());
            }
        },"李四").start();


    }

🍒三,线程的生命周期

  • 新建:创建线程对象
  • 就绪:线程有执行资格,没有执行权
  • 运行:有执行资格,有执行权
  • 阻塞:由于一些操作让线程改变了状态,没有执行资格,没有执行权,另一些操作可以把它给激活,激活处于就绪状态
  • 死亡:线程对象变成垃圾,等待被回收
举报

相关推荐

0 条评论