牛客網Java刷題知識點之同步方法和同步程式碼塊的區別(用synchronized關鍵字修飾)...

weixin_34037977發表於2017-08-23

 

 

  不多說,直接上乾貨!

 

 

擴充套件部落格

牛客網Java刷題知識點之多執行緒同步的實現方法有哪些

 

 

 

為何要使用同步? 

    java允許多執行緒併發控制,當多個執行緒同時操作一個可共享的資源變數時(如資料的增刪改查),  將會導致資料不準確,相互之間產生衝突,因此加入同步鎖以避免在該執行緒沒有完成操作之前,被其他執行緒的呼叫,從而保證了該變數的唯一性和準確性。
 
 
 
 
 
什麼是同步方法 ,什麼是同步程式碼塊?
  用synchronized關鍵字修飾的方法。 用synchronized關鍵字修飾的語句塊。
 
 
  在java程式碼中,每一個物件都擁有一把鎖,使用synchronzied關鍵字可以獲取到物件上的鎖。該關鍵字可以用到方法上或者程式碼塊上。

  同步方法:(粗粒度鎖):

        1.修飾一般方法: public synchronized void method (){...},獲取的是當前呼叫               物件this上的鎖

        2.修飾靜態方法: public static synchronized void method (){...},獲取當前類的             位元組碼物件上的鎖

 

  即在方法的宣告之前加入synchronized 關鍵字

public  synchronized  void  mutiThreadAccess();

  

 

 

 

 

  同步程式碼塊(細粒度鎖):

         synchronized ( obj ) {...},同步程式碼塊可以指定獲取哪個物件上的鎖。

 

synchronized(syncObject) {
        //訪問syncObject的程式碼
}

 

 

 

 

 

 
 
  同步程式碼塊使用的鎖是任意物件Object。
  同步方法使用的鎖是this。
  使用靜態修飾的同步函式使用的是該類所在的位元組碼檔案物件,格式為類名.class。
 
 
  
  同步方法預設用this或者當前類class物件作為鎖;
  同步程式碼塊可以選擇以什麼來加鎖,比同步方法要更細顆粒度,我們可以選擇只同步會發生同步問題的部分程式碼而不是整個方法;
 
 
   
  同步方法預設用this或者當前類class物件作為鎖;
  同步程式碼塊可以選擇以什麼來加鎖,比同步方法要更細顆粒度,我們可以選擇只同步會發生同步問題的部分程式碼而不是整個方法;
  同步方法使用關鍵字 synchronized修飾方法,而同步程式碼塊主要是修飾需要進行同步的程式碼,用   synchronized(object){程式碼內容}進行修飾;
 

 

相關文章