线程运行状态·

时间:2021-07-14
本文章向大家介绍线程运行状态·,主要包括线程运行状态·使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

线程的状态:

说明:

NEW(新建状态):new出一个线程,还没有start的时候

Teminated(结束状态):线程结束

Runnable(运行状态):Runnable里面有两种状态,以下两种。调用start的时候,交给线程调度器执行,也就是交给操作系统。

Ready(就绪状态):就绪状态也就是当前线程存在CPU的等待队列里面

Running(运行状态):线程到了Running状态才算是真正的运行状态。

TimeWaiting(等待状态):按照时间等待,

waiting(等待状态):等待状态,运行完之后回去Runable

Blocked(阻塞状态):同步代码块没有获得锁就会阻塞,获得锁就是就绪状态。

出现的问题:

哪些是JVM管理的,哪些是操作系统管理的?

上面这些状态全是由JVM管理的,因为JVM管理的时候也要通过操作系统,所以呢,那个操作系统和那个JVM是分不开的,JVM是跑在操作系统上的一个层序、

线程什么状态被挂起,挂起是否也是一个状态?

Running的时候,在一个CPU上会跑很多个线程,从Running状态被扔回其他状态就叫做线程挂起,CPU控制这个过程。

package juc_1;/*
 *@author wupeng
 *@time 2021/7/14-10:51

 */

public class ThreadfState {

    static class MyThread extends Thread {
        @Override
        public void run() {
            System.out.println(this.getState());
            for (int i = 0; i < 10; i++) {
                try {
                    Thread.sleep(500);
                    if(i == 5) {
                        System.out.println(this.getState());
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(i);
            }
        }
    }

    public static void main(String[] args) {
        Thread t = new MyThread();
        //获取线程的状态
        System.out.println(t.getState());
        t.start();
        try {
            t.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //然后join之后,结束了一个是Timenated
        System.out.println(t.getState());

    }
}

原文地址:https://www.cnblogs.com/wpbk/p/15009882.html