天天看點

線程:線程的狀态

 狀态NEW, RUNNABLE, TERMINATED

    new: 線程執行個體化後,還從未執行start()方法時的狀态。

     runnable: 線程進入運作的狀态。

     terminated: 線程被銷毀時的狀态。

public class MyThread extends Thread{

	public MyThread(){
		System.out.println("構造方法中的狀态:" + Thread.currentThread().getState());
	}
	
	@Override
	public void run(){
		System.out.println("run方法中的狀态:" + Thread.currentThread().getState());
	}
}

public class Run {
	public static void main(String[] args){
		try {
			MyThread t = new MyThread();
			System.out.println("main方法中的狀态1:"+t.getState());
			Thread.sleep(1000);
			t.start();
			Thread.sleep(1000);
			System.out.println("main方法中的狀态2:"+t.getState());
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}           

TIMED_WAITING

  線程TIMED_WAITING代表線程執行了Thread.sleep()方法,呈等待狀态,等待時間到達,繼續向下運作。

public class MyThread extends Thread{

	@Override
	public void run(){
		try {
			System.out.println("begin sleep");
			Thread.sleep(10000);
			System.out.println("  end sleep");
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

public class Run {
	public static void main(String[] args){
		try {
			MyThread t = new MyThread();
			t.start();
			Thread.sleep(1000);
			System.out.println("main方法中的狀态:"+t.getState());
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}           

BLOCKED狀态

  BLOCKED狀态出現在某一個線程在等待鎖的時候。

public class MyService {
	synchronized static public void serviceMethod(){
		try {
			System.out.println(Thread.currentThread().getName()+" 進入了業務方法  "+Thread.currentThread().getState());
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

public class MyThread1 extends Thread{

	@Override
	public void run(){
		MyService.serviceMethod();
	}
}

public class MyThread2 extends Thread{

	@Override
	public void run(){
		MyService.serviceMethod();
	}
}

public class Run {
	public static void main(String[] args){
		try {
			MyThread1 t1 = new MyThread1();
			MyThread2 t2 = new MyThread2();
			t1.setName("A");
			t2.setName("B");
			t1.start();
			t2.start();
			Thread.sleep(1000);
			System.out.println("main方法中的t1狀态:"+t1.getState());
			System.out.println("main方法中的t2狀态:"+t2.getState());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}           

 WAITING狀态

public class MyService {
	private Object object = new Object();
	
	public void print(){
		synchronized(object){
			try {
				System.out.println(Thread.currentThread().getName()+"線程");
				object.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

public class Run {
	public static void main(String[] args) throws InterruptedException{
		final MyService m = new MyService();
		Runnable runnable = new Runnable(){
			@Override
			public void run() {
				m.print();
			}
		};
		
		Thread t = new Thread(runnable,"A");
		t.start();
		Thread.sleep(1000);
		System.out.println(t.getState());
	}
}