Fork me on GitHub

线程状态

简介

线程从新生到死亡的不同阶段。

阶段

  • NEW
    线程刚刚创建,还没有启动。
  • RUNNABLE
    可运行状态,由线程调度器可以安排执行。
  • WAITING
    等待被唤醒。
  • TIMED WAITING
    隔一段时间后自动唤醒。
  • BLOCKED
    被阻塞,正在等待锁。
  • TERMINATED
    线程结束

代码

public static class MyThread extends Thread{
        @Override
        public void run() {
            System.out.println("线程状态2:   "+this.getState());//RUNNABLE
            try {
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }


    public static void MyThreadTwo()  {
        synchronized (ThreadState.class){
            try {
//                System.out.println("线程名:"+Thread.currentThread().getName()+new Date());
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void MyThreadThree()  {
            try {
                LockSupport.park();
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    }

    public void comp() throws InterruptedException {
        MyThread myThread = new MyThread();
        //NEW
        System.out.println("线程状态1:   "+myThread.getState());
        myThread.start();
        TimeUnit.SECONDS.sleep(1);
        //MyThread线程执行完成后,主线程再执行
        //TIMED_WAITING
        System.out.println("线程状态44:   "+myThread.getState());
        //myThread线程执行结束,主线程再执行
        myThread.join();
        //TERMINATED
        System.out.println("线程状态33:   "+myThread.getState());

        Thread t2 = new Thread(ThreadState::MyThreadTwo, "t2");
        Thread t3 = new Thread(ThreadState::MyThreadTwo, "t3");
        Thread t4 = new Thread(ThreadState::MyThreadThree, "t4");
        t2.start();
        TimeUnit.SECONDS.sleep(1);
        t3.start();
        t4.start();
        TimeUnit.SECONDS.sleep(1);
        //WAITING
        System.out.println("线程状态66:   "+t4.getState());
        //BLOCKED
        System.out.println("线程状态55:   "+t3.getState());
    }

Gitee地址

https://gitee.com/zhuayng/foundation-study/blob/develop/JavaBasis/JUC/src/main/java/com/yxkj/juc/c_000/HowToCreateThread.java

posted @ 2020-04-27 10:55  晨度  阅读(191)  评论(0编辑  收藏  举报