Java线程状态的简介

Java线程的状态有:NEW状态,RUNNABLE状态,RUNNING状态,WAITING状态和TIMED_WAITING状态,BLOCKING状态,TERMINALED状态。

 

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. RUNNABLE状态。是线程的可运行状态,表示该线程处于准备运行,当执行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. TERMINALED状态。当一个线程执行完毕之后,该线程就会进入TERMINALED状态,终止状态。

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

 

 

你可能感兴趣的:(Java基础)