Java多線程 5 同步方法的鎖

創建同步方法之後,這個同步代碼塊使用的鎖就是當前對象

package thread;

/*
同步函數用的是哪一個鎖呢?
函數需要被對象調用。那麼函數都有一個所屬對象引用。就是this。所以同步函數使用的鎖是this。

通過該程序進行驗證。

使用兩個線程來買票。
一個線程在同步代碼塊中。
一個線程在同步函數中。
都在執行買票動作。

*/
public class Thread_4_SynMethodDemo2 {
	public static void main(String[] args) 
	{
		Ticket3 t = new Ticket3();
		Thread t1 = new Thread(t);
		Thread t2 = new Thread(t);
		
		t1.start();
		
		try{Thread.sleep(100);}catch(Exception e){}
		
		t.flag = false;
		t2.start();
	}
}


class Ticket3 implements Runnable{
	private  int tick = 100;
	Object obj = new Object();
	boolean flag = true;
	
	public  void run(){
		if(flag){
			while(true)	{
				synchronized(this){		//設置成這樣子就喝同步方法一樣了
				//synchronized(obj){			//設置成這樣的話會導致可能的危險(0會出現)
					if(tick>0){
						try{Thread.sleep(10);}catch(Exception e){}
						System.out.println(Thread.currentThread().getName()+"....code : "+ tick--);
					}
				}
			}
		}
		else
			while(true)
				show();
	}
	public synchronized void show(){//這裏的鎖是this
		if(tick>0){
			try{Thread.sleep(10);}catch(Exception e){}
			System.out.println(Thread.currentThread().getName()+"....show.... : "+ tick--);
		}
	}
}


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