线程的状态

线程状态

线程状态的流程图

5种状态

  1. 初始状态:仅仅是新建了线程
  2. 可运行状态(就绪状态):指该线程被创建,可以由cpu调度执行
  3. 运行状态:获取了cpu时间片,正在运行;当cpu时间片用完,会进入到可运行状态
  4. 阻塞状态:如果调用了阻塞api,线程会释放cpu,不占据cpu资源
  5. 终止状态:线程执行完成后的状态

java线程6种状态

  1. New: 新创建的线程,尚未执行
  2. Runnable:调用了线程的start方法,线程进入runnable状态;java线程中将就绪ready和运行中running两种状态笼统的称为“运行”;当线程被调用了start方法,可能在等待cpu的使用权,此时处于就绪状态;就绪的线程在获得cpu时间片后变为运行中状态running
  3. Blocked: 线程被阻塞
  4. waiting: 线程在等待其他线程做出一些动作
  5. 超时等待time_waiting: 该状态不同于waiting,可以在规定的时间内自行返回
  6. 终止terminated: 线程执行完毕

java线程状态的实例

import java.util.concurrent.TimeUnit;

public class TestState {

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            System.out.println("running...");
        });

        Thread t2 = new Thread(() -> {
            while (true) {

            }
        });
        t2.start();

        Thread t3 = new Thread(() -> {
            System.out.println("t3 running...");
        });
        t3.start();

        Thread t4 = new Thread(() -> {
            synchronized (TestState.class) {
                try {
                    TimeUnit.SECONDS.sleep(9999);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        t4.start();


        Thread t5 = new Thread(() -> {
            try {
                t2.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        t5.start();

        Thread t6 = new Thread(() -> {
            synchronized (TestState.class) {
                try {
                    TimeUnit.SECONDS.sleep(9999);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        t6.start();

        TimeUnit.SECONDS.sleep(1);

        System.out.println(t1.getState());
        System.out.println(t2.getState());
        System.out.println(t3.getState());
        System.out.println(t4.getState());
        System.out.println(t5.getState());
        System.out.println(t6.getState());
    }
}
posted @ 2021-05-13 23:32  bright_ye  阅读(144)  评论(0编辑  收藏  举报