sychronized 同步的等待和喚醒鎖的狀態

public class MythreadWaitNotify implements Runnable {
	int i=0;
	String name;
	static Object o=new Object();
	public MythreadWaitNotify(int i,String name){
		this.i=i;
		this.name=name;
	}
	/**
	 * 兩個房間,先進去的丟鑰匙給另一個人,睡覺。另一個人拿了鑰匙進去,把那個人喊醒,
	 * 那個人坐着不幹事情,自己做完事情出來再把鑰匙還給他,他再繼續執行下面
	 */
	public void run() {
		if(i==1){
			synchronized (o) {
				try {
					System.out.println(name+"線程扔出鎖等待喚醒");
					o.wait();		//!!!!釋放鎖,並且等待喚醒
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} 		
				System.out.println(name+"線程接回鎖並繼續執行---------");
			}
		}
		if(i==2){
			synchronized (o) {
				o.notify();			//!!!!!喚醒等待的線程,但並不釋放鎖,繼續運行完
				System.out.println(name+"線程喚醒等待鎖並繼續執行,不釋放鎖");
				
			}
			System.out.println(name+"釋放鎖");
		}
		
		
	}
	public static void main(String[] args) {
		new Thread(new MythreadWaitNotify(1,"線程1")).start();
		new Thread(new MythreadWaitNotify(2,"線程2")).start();

	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章