zoukankan      html  css  js  c++  java
  • 1,Thread 概念以及Thread 的6个状态

    Thread 有6个状态 , NEW, RUNNABLE , BLOCKED, WATTING, TIMED WAITING, TERMINATED

    1.NEW
    至今尚未启动的线程的状态。
    2.RUNNABLE
    可运行线程的线程状态。处于可运行状态的某一线程正在 Java 虚拟机中运行,但它可能正在等待操作系统中的其他资源,比如处理器。
    3.BLOCKED
    受阻塞并且正在等待监视器锁的某一线程的线程状态。处于受阻塞状态的某一线程正在等待监视器锁,以便进入一个同步的块/方法,或者在调用 Object.wait 之后再次进入同步的块/方法。
    4.WAITING
    某一等待线程的线程状态。某一线程因为调用下列方法之一而处于等待状态
    不带超时值的 Object.wait
    不带超时值的 Thread.join
    LockSupport.park
    5.TIMED_WAITING
    具有指定等待时间的某一等待线程的线程状态。某一线程因为调用以下带有指定正等待时间的方法之一而处于定时等待状态:
    Thread.sleep
    带有超时值的 Object.wait
    带有超时值的 Thread.join
    LockSupport.parkNanos
    LockSupport.parkUntil
    6.TERMINATED
    已终止线程的线程状态。线程已经结束执行。

    测试代码如下

    package com.zyguo.thread;
    
    public class SleepRunnable implements Runnable{
        private int sleepTime;
        public SleepRunnable( int sleepTime ){
            this.sleepTime = sleepTime;
        }
        @Override
        public void run() {
            try {
                System.out.println( Thread.currentThread() + " begin sleep " + this.sleepTime );
                Thread.sleep( sleepTime );
                System.out.println( Thread.currentThread() + " end sleep " + this.sleepTime );
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    package com.zyguo.thread;
    
    import java.lang.Thread.State;
    
    public class ThreadStatus {
        public static void main(String[] args) {
            final Thread t1 = new Thread( new SleepRunnable( 5000 ) ); 
            final Thread t2 = new Thread( new SleepRunnable( 10000 ) );
            System.out.println("new t1 status=" + t1.getState() );
            System.out.println("new t2 status=" + t2.getState() );
            
            Thread monitor = new Thread( new Runnable() {
                public void run() {
                    //只要 t1 和  t2 有一个没停,就不停止监控
                    while ( ! ( t1.getState() == State.TERMINATED && t2.getState() == State.TERMINATED ) ) {
                        System.out.println("t1 status:" + t1.getState() + ",t=" + System.currentTimeMillis() );
                        System.out.println("t2 status:" + t2.getState() + ",t=" + System.currentTimeMillis() );
                        try {
                            Thread.sleep( 1000 );
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    
                    System.out.println("t1 status:" + t1.getState() + ",t=" + System.currentTimeMillis() );
                    System.out.println("t2 status:" + t2.getState() + ",t=" + System.currentTimeMillis() );
                    
                }
            } );
            
            monitor.start();
            t1.start();
            t2.start();
            
        } 
    }

    结果如下

    new t1 status=NEW
    new t2 status=NEW
    t1 status:RUNNABLE,t=1426735950026
    Thread[Thread-0,5,main] begin sleep 5000
    t2 status:RUNNABLE,t=1426735950026
    Thread[Thread-1,5,main] begin sleep 10000
    t1 status:TIMED_WAITING,t=1426735951040
    t2 status:TIMED_WAITING,t=1426735951040
    t1 status:TIMED_WAITING,t=1426735952055
    t2 status:TIMED_WAITING,t=1426735952055
    t1 status:TIMED_WAITING,t=1426735953070
    t2 status:TIMED_WAITING,t=1426735953070
    t1 status:TIMED_WAITING,t=1426735954085
    t2 status:TIMED_WAITING,t=1426735954085
    Thread[Thread-0,5,main] end sleep 5000
    t1 status:TERMINATED,t=1426735955100
    t2 status:TIMED_WAITING,t=1426735955100
    t1 status:TERMINATED,t=1426735956115
    t2 status:TIMED_WAITING,t=1426735956115
    t1 status:TERMINATED,t=1426735957130
    t2 status:TIMED_WAITING,t=1426735957130
    t1 status:TERMINATED,t=1426735958145
    t2 status:TIMED_WAITING,t=1426735958145
    t1 status:TERMINATED,t=1426735959160
    t2 status:TIMED_WAITING,t=1426735959160
    Thread[Thread-1,5,main] end sleep 10000
    t1 status:TERMINATED,t=1426735960175
    t2 status:TERMINATED,t=1426735960175

     

  • 相关阅读:
    (数据科学学习手札48)Scala中的函数式编程
    Java中的集合(十三) 实现Map接口的Hashtable
    Java中的集合(十二) 实现Map接口的WeakHashMap
    Java中的集合(十一) 实现Map接口的TreeMap
    Java集合(十)实现Map接口的HashMap
    Java集合(九)哈希冲突及解决哈希冲突的4种方式
    Java集合(八)哈希表及哈希函数的实现方式
    Java中的集合(七)双列集合顶层接口------Map接口架构
    Java中的集合(六)继承Collection的Set接口
    Java中的集合(五)继承Collection的List接口
  • 原文地址:https://www.cnblogs.com/zyguo/p/4346365.html
Copyright © 2011-2022 走看看