Javaスレッド状態の概要

2769 ワード

Javaスレッドの状態は、NEW状態、RUNNALE状態、RUNNIG状態、WAITING状態、TIMED_です。WAITING状態、BLOCKING状態、TEMINA LED状態。
 
1.NEW状態。新しいスレッドを作成すると、スレッドはNEW状態になり、スレッドの最初の状態となります。
public class ThreadDemo {

	public static void main(String[] args) {
		
		Thread t = new Thread();//      。
		
		System.out.println("  t    : "+ t.getState().toString());		
		
	}

}


    :
  t    : NEW
 
2. RUNABLE状態。はスレッドの実行可能状態であり、このスレッドが準備運転中であることを示し、start方法を実行するとスレッドはこの状態に入ります。
public class ThreadDemo {

	public static void main(String[] args) {
		
		Thread t = new Thread();//      。
		
		System.out.println("  t    : "+ t.getState().toString());		
		
		t.start();
		
		System.out.println("  t    : "+ t.getState().toString());	
	}
}

     :
  t    : NEW
  t    : RUNNABLE
3.RUNNING状態。スレッドが動作中の状態を示し、CPUがこのスレッドを実行すると、このスレッド状態をRUNNING状態に変更します。この状態は方法では入手できません。
4. WAITING状態です。スレッド待ち状態は、同期所を取得し、キーワードsynchronizeを使用する必要があります。同期コードブロック内でwait()を実行し、スレッドを起動するまでWAITING状態にします。
5.TIMED_WAITING状態です。またはwait(long)方法は、アクティブになるまでWAITING状態とTIMED_にあります。WAITING状態です。notifyまたはnotifyAllを実行するとスレッドがアクティブになります。
6.BLOCKED状態。スレッドが詰まっている状態で、スレッドが待っていると渋滞状態になります。実はスレッドがwai()wait(long)sleep(long)を実行するとBLOCKED状態になります。
7. TERMNA LED状態です。スレッドが実行されると、スレッドはTEMINA状態になり、終了状態になります。
public class ThreadDemo implements Runnable {

	public static Object object = new Object();

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

		Thread t = new Thread(new ThreadDemo());//       。

		System.out.println("1   t    : " + t.getState().toString());

		t.start();//   start  ,      RUNNABLE  。

		System.out.println("2   t    : " + t.getState().toString());
		
		Thread.sleep(1000);//     sleep    main    , t    。

		System.out.println("4   t    : " + t.getState().toString());
		
		synchronized (object) {
			
			object.notify();
			
		}
		System.out.println("5   t    : " + t.getState().toString());

		Thread.sleep(1000);

		System.out.println("7   t    : " + t.getState().toString());

	}

	@Override
	public void run() {
		System.out.println("3   t    : " + Thread.currentThread().getState().toString());
//
//		try {
//			Thread.sleep(1000);// t  
//		} catch (InterruptedException e) {
//
//			e.printStackTrace();
//		}

		synchronized (object) {
			
			try {
				object.wait();//        ,            。
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}

		System.out.println("6   t    : " + Thread.currentThread().getState().toString());

	}

}



1   t    : NEW
2   t    : RUNNABLE
3   t    : RUNNABLE
4   t    : WAITING
5   t    : BLOCKED
6   t    : RUNNABLE
7   t    : TERMINATED