线程:线程的状态

 状态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状态

  状态waiting是线程执行了Object.wait()方法后所处的状态

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());
	}
}
发布了557 篇原创文章 · 获赞 40 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/m0_37564426/article/details/103469493