回覆列表
  • 1 # 山東中公優就業

    一、java允許多執行緒併發控制,當多個執行緒同時操作一個可共享的資源變數時(如資料的增刪改查),將會導致資料不準確,相互之間產生衝突,因此加入同步鎖以避免在該執行緒沒有完成操作之前,被其他執行緒的呼叫, 從而保證了該變數的唯一性和準確性。

    二、實現方法:

    1、同步方法即有synchronized關鍵字修飾的方法。由於java的每個物件都有一個內建鎖,當用此關鍵字修飾方法時,內建鎖會保護整個方法。在呼叫該方法前,需要獲得內建鎖,否則就處於阻塞狀態。程式碼如: public synchronized void save(){}123注:synchronized關鍵字也可以修飾靜態方法,此時如果呼叫該靜態方法,將會鎖住整個類

    2、同步程式碼塊即有synchronized關鍵字修飾的語句塊。被該關鍵字修飾的語句塊會自動被加上內建鎖,從而實現同步。

    3、使用特殊域變數(volatile)實現執行緒同步

    1)volatile關鍵字為域變數的訪問提供了一種免鎖機制;

    2)使用volatile修飾域相當於告訴虛擬機器該域可能會被其他執行緒更新;

    3)因此每次使用該域就要重新計算,而不是使用暫存器中的值;

    4)volatile不會提供任何原子操作,它也不能用來修飾final型別的變數;

    4、使用重入鎖實現執行緒同步在JavaSE5.0中新增了一個java.util.concurrent包來支援同步。ReentrantLock類是可重入、互斥、實現了Lock介面的鎖,它與使用synchronized方法和快具有相同的基本行為和語義,並且擴充套件了其能力

    5、使用區域性變數實現執行緒同步如果使用ThreadLocal管理變數,則每一個使用該變數的執行緒都獲得該變數的副本,副本之間相互獨立,這樣每一個執行緒都可以隨意修改自己的變數副本,而不會對其他執行緒產生影響。

  • 中秋節和大豐收的關聯?
  • 五筆裡面的成字字根有幾個?都是那些?