Java多线程状态图

掌握好这个状态图,能更好的帮助你了解java线程的生命周期:

Java多线程状态图_第1张图片

需要注意的几点:
1,wait()和notify()方法均需要在synchronized方法或块中调用,并且必须针对相同对象,因为这两个操作均需要获取该对象的锁才能完成操作。wait()时,线程会释放掉当前的monitor.
2,sleep(x)不会释放掉当前的monitor

wait()和nofity()用法举例:

package cn.fsf.thread;

public class ThreadTest {
	class MyThread extends Thread {
		@Override
		public void run() {
			System.out.println("thread " + Thread.currentThread().getName()
					+ " is running...");
			synchronized (this) {
				try {
					System.out.println("thread "
							+ Thread.currentThread().getName()
							+ " begin waiting...");
					wait();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			System.out.println("thread " + Thread.currentThread().getName()
					+ " has bean nofitied");
		}
	}

	public void test() throws InterruptedException {
		Thread thread = new MyThread();
		thread.start();
		Thread.currentThread().sleep(1000L);// 主线程等待1s,确保thread已经进入等待状态
		while (!thread.getState().equals(Thread.State.WAITING)) {
			Thread.currentThread().yield();
		}
		synchronized (thread) {
			thread.notify();
		}
	}

	public static void main(String[] args) throws InterruptedException {
		ThreadTest test = new ThreadTest();
		test.test();
	}
}

你可能感兴趣的:(java,线程)