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--);
		}
	}
}


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