001 线程的状态

Posted 最爱五仁月饼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了001 线程的状态相关的知识,希望对你有一定的参考价值。

一 . 概述

线程的整个生命周期是在不断切换其状态的.

  在jdk中的Thread类之中有一个枚举类,在这个枚举类之中定义了线程的所有状态.


 

二 .线程的状态 

public enum State {
        
        NEW,
      
        RUNNABLE,
      
        BLOCKED,
     
        WAITING,
      
        TIMED_WAITING,

        TERMINATED;
    }

上面的所有状态里面在加上一running状态总共有7个状态.

  [1]new状态: 当一个线程创建之后就处于new状态.

  [2]runnable状态: 就绪状态,该线程是可以在抢占了时间片之后就能运行.

  [3]Terminated状态 : 线程终结之后就处于死亡状态.

  [4]block状态: 线程因没有获得锁而被迫进入了锁池之中的状态,或者IO资源没有获取到,都是被迫进入的.

  [5]waiting状态 : 线程主动进入等待池中,等待其他线程唤醒自己.

  [6]time_waiting(sleep)状态: 线程主动进入睡眠状态.

  [7]running(运行)状态:获取时间片的线程的状态,处于正在运行的状态中.


 

三 .线程状态转换

  在上面线程的状态的描述其实无法很详细的,因为线程可能由于各种原因进行了状态的转换.

我们现在了解线程的状态: 

    这里需要各种的API,但是现在仅仅只是作为一个了解.

  例子:

    @Test
    public void test() {
        //创建了一个线程,此时线程处于new状态
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //此时线程处于运行状态
                    Thread.sleep(300); //此时线程处于睡眠状态
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //
                for(int i = 0 ; i <5 ;i++)
                    System.out.println("running ...");
                
                try {
                    //陷入到了常量的一个等待池,
                    //没有其他线程的唤醒,则该线程有缘都会等待该线程.
                    "1".wait(); 
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        thread.start();
        //开启线程,线程就处于了runnable--就绪状态.
    }

在上面的例子中,我们展现了多个线程的状态.

但是现在还无法展现更多的状态的状态,当对线程的理解更深的情况下,我们就对这一部分的理解更好.

以上是关于001 线程的状态的主要内容,如果未能解决你的问题,请参考以下文章

newCacheThreadPool()newFixedThreadPool()newScheduledThreadPool()newSingleThreadExecutor()自定义线程池(代码片段

VSCode自定义代码片段13——Vue的状态大管家

VSCode自定义代码片段13——Vue的状态大管家

VSCode自定义代码片段13——Vue的状态大管家

[新增ST-001片段]全程字幕-20套UML+Enterprise Architect建模示范视频

JavaSE线程基础