码迷,mamicode.com
首页 > 编程语言 > 详细

001 线程的状态

时间:2018-04-30 22:45:59      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:waiting   running   AC   star   run   没有   枚举   try   rac   

一 . 概述

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

  在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 线程的状态

标签:waiting   running   AC   star   run   没有   枚举   try   rac   

原文地址:https://www.cnblogs.com/trekxu/p/8974975.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!