欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

多线程——线程的运行状态

程序员文章站 2022-05-05 16:34:14
...

线程的存在状态

创建状态:线程刚刚被创建出来的状态。当线程处于“新线程“状态时,仅仅是一个空线程对象,它还没有分配到系统资源。因此只能启动或终止它。任何其他操作都会引发异常。

可运行状态:当线程对象调用了start()方法后的状态。start()只是告诉系
统“所需资源已经到位,可以投入运行”,此时线程并不一定马上开始运行,
因为一个CPU只能运行一个线程,是否真正开始运行,还要看当前系统的调
度情况,比如CPU的占用情况等。

阻塞状态:所谓阻塞,是指线程从运行状态进入的暂停运行状态。

死亡状态:当run()方法执行完毕,或别的线程调用stop()方法,线程进入死
亡态。线程死亡后,其占据的资源被系统收回,将无法再通过调用start()进
入可运行状态

线程的运行状态图

多线程——线程的运行状态

线程的让步

public static void yield() 方法

线程的休眠与唤醒

创建线程

package com.foot.lesson03;

public class SleepThread extends Thread {
    @Override
    public void run() {
        try {
            Thread.sleep(5 * 1000 * 60);//挂起该线程5分钟
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("程序运行完毕!");
    }
}

运行该线程并设置唤醒触发的事件

package com.foot.lesson4;

import java.io.IOException;

import com.foot.lesson03.SleepThread;

public class App {
    public static void main(String[] args) {
        SleepThread st = new SleepThread();
        st.start();
        System.out.println("线程被挂起5分钟,回车键唤醒该线程!");
        try {
            System.in.read();
            st.interrupt();//唤醒该线程
            System.out.println("//////////////////////////////////");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果

当时间不足5分钟,运行结果如下:
线程被挂起5分钟,回车键唤醒该线程!
//这里手动输入文字并输入回车键//
//////////////////////////////////
java.lang.InterruptedException: sleep interrupted
程序运行完毕!
at java.lang.Thread.sleep(Native Method)
at com.foot.lesson03.SleepThread.run(SleepThread.java:7)

当时间足够5分钟的时候,运行结果如下:
线程被挂起5分钟,回车键唤醒该线程!
程序运行完毕!