同步程式碼塊和同步函式
阿新 • • 發佈:2019-02-19
/* 函式需要被物件呼叫,那麼函式都有一個所屬物件引用,就是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(); } }
結果圖: