1. 程式人生 > >同步程式碼塊和同步函式

同步程式碼塊和同步函式

/*
 函式需要被物件呼叫,那麼函式都有一個所屬物件引用,就是this。
 所以同步函式使用的鎖是this。
 */


class  Ticket4 implements Runnable
{
	boolean flag=true;
	private int ticket =100;
	Object obj=new Object();
	public void run()
	{
		if(flag)
		{
			while(true)
			{
				synchronized(obj)   //同步程式碼塊
				{
					if(ticket>0)
					{
						try
						{
							Thread.sleep(10);
						}
						catch(Exception e){}
						System.out.println(Thread.currentThread().getName()+"salse......"+ticket--);
					}
				}
		
			}
		}
		
		while (true)
		{
			{
				this.show();
			}	
		}
	}
	//建立一個新的函式,把需要同步的程式碼放裡面
	public synchronized void show()//同步函式 this
	{
		if(ticket>0)
		{
			try
			{
				Thread.sleep(10);
			}
			catch(Exception e){}
			System.out.println(Thread.currentThread().getName()+"show......"+ticket--);
		}
	}
}
public class soupiao4 {
	public static void main(String[] args) {
		Ticket4 t=new Ticket4();
		Thread t1=new Thread(t);
		Thread t2=new Thread(t);
		t1.start();
		try
		{
			Thread.sleep(10);
		}
		catch(Exception e){}
		t.flag=false;
		t2.start();
	}
}

結果圖: