一 java中的线程

操作系统的进程五个状态:新建,就绪,运行,等待,结束

线程一共有六种状态

TERMINATED   结束 包括正常结束和异常结束
NEW                  新建状态 也就是对象创建了,但还没执行start方法

BLOCKED         锁池状态(也有说是阻塞状态) 等待的一种,特指等着获得锁,也就是被堵在syn方法外面。被挂到锁对象的阻塞队列上了

WAITING          等待事件发生,常常使用wait()方法 进入此状态,挂到锁对象的等待队列上。。
TIMED_WAITING  跟等待状态差不多,只不过时间到了,就进入可运行状态了(但是随之就有可能因为没抢到锁,到锁池状态)

      以上三个状态个人认为都是操作系统中的 等待(阻塞)状态
 
RUNNABLE     可运行状态   是操作系统中就绪状态和运行状态

 

这里有个待研究的点是 使用文件输入流读入一个大文件,我测试是超时等待状态。预想该是一种等待状态。。待解决

 

总结: java线程把就绪和运行合为一个状态—可运行;同时把等待分成三个状态 等待 ,阻塞(锁池) ,定时等待

 

二 demo 

以下的这一段代码可以更好的体现   这几种状态 当然0,1,2,3的顺序可能不一致,看调度结果

public class Main {
    private static  int i = 0;
     static class MyThread extends  Thread{
         @Override
         public void run() {
             try {
                 get();
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
         }
     }

    public static void main(String[] args) throws InterruptedException {


        Thread[] arr = new Thread[10];

        arr[0] = new MyThread();
        arr[1] = new MyThread();
        arr[2] = new MyThread();
        arr[3] = new MyThread();
        arr[4] = new MyThread();
        arr[0].start();
        arr[1].start();
        arr[2].start();
        arr[3].start();
        Thread.currentThread().sleep(1000);   //主线程等一下 让四个子线程先执行
        System.out.println(arr[0].getState());  //BLOCKED 第四名 没抢到锁 锁池状态
        System.out.println(arr[1].getState());   //WAITING 第一名 抢到锁 进入等待状态
        System.out.println(arr[2].getState());  // TIMED_WAITING 第三名  进入定时等待状态
        System.out.println(arr[3].getState());   //TERMINATED 第二名  直接return 结束
        System.out.println(arr[4].getState());   //还没start
        System.out.println(Thread.currentThread().getState()); // 主线程 运行状态



        }

    public static synchronized void get() throws InterruptedException {
         i++;
         if(i==1)
          Main.class.wait();  //第一次进入 等待
         if(i==2)
             return;         //第二次进入 直接返回

      Thread.currentThread().sleep(1000*5);  // 第三次进入超时等待

    }
    }

  

 

 

转载于:https://www.cnblogs.com/caijiwdq/p/11164218.html