當前位置:編程學習大全網 - 源碼下載 - Java多線程鎖如何進行數據同步***享

Java多線程鎖如何進行數據同步***享

 Java多線程鎖是為了解決數據同步中的數據安全問題 下面我們就來詳細的學習下有關於Java多線程鎖的相關問題 只有不斷的學習才能不斷的提高自身的相關技術

 大多數應用程序要求線程互相通信來同步它們的動作 在Java程序中最簡單實現同步的方法就是上Java多線程鎖 為了防止同時訪問***享資源 線程在使用資源的前後可以給該資源上鎖和開鎖 假想給復印機上鎖 任壹時刻只有壹個職員擁有鑰匙 若沒有鑰匙就不能使用復印機

 給***享變量上Java多線程鎖就使得Java線程能夠快速方便地通信和同步 某個線程若給壹個對象上了鎖 就可以知道沒有其他線程能夠訪問該對象 即使在搶占式模型中 其他線程也不能夠訪問此對象 直到上鎖的線程被喚醒 完成工作並開鎖 那些試圖訪問壹個上鎖對象的線程通常會進入睡眠狀態 直到上鎖的線程開鎖 壹旦鎖被打開 這些睡眠進程就會被喚醒並移到準備就緒隊列中

 在Java編程中 所有的對象都有鎖 線程可以使用synchronized關鍵字來獲得鎖 在任壹時刻對於給定的類的實例 方法或同步的代碼塊只能被壹個線程執行 這是因為代碼在執行之前要求獲得對象的Java多線程鎖 繼續我們關於復印機的比喻 為了避免復印沖突 我們可以簡單地對復印資源實行同步 如同下列的代碼例子 任壹時刻只允許壹位職員使用復印資源 通過使用方法(在 Copier 對象中)來修改復印機狀態 這個方法就是同步方法 只有壹個線程能夠執行壹個Copier對象中同步代碼 因此那些需要使用Copier對象的職員就必須排隊等候

  class CopyMachine {

  public synchronized void makeCopies(Document d int nCopies) {

  //only one thread executes this at a time

  }

  public void loadPaper() {

  //multiple threads could access this at once!

  synchronized(this) {

  //only one thread accesses this at a time

  //feel free to use shared resources overwrite members etc

 Fine grain Java多線程鎖

 在對象級使用鎖通常是壹種比較粗糙的方法 為什麽要將整個對象都上鎖 而不允許其他線程短暫地使用對象中其他同步方法來訪問***享資源?如果壹個對象擁有多個資源 就不需要只為了讓壹個線程使用其中壹部分資源 就將所有線程都鎖在外面 由於每個對象都有Java多線程鎖 可以如下所示使用虛擬對象來上鎖

  class FineGrainLock {

  MyMemberClass x y;

  Object xlock = new Object() ylock = new Object();

  public void foo() {

  synchronized(xlock) {

  //access x here

  }

  //do something here but don t use shared resources

  synchronized(ylock) {

  //access y here

  }

  }

  public void bar() {

  synchronized(this) {

  //access both x and y here

  }

  //do something here but don t use shared resources

  }

  }

lishixinzhi/Article/program/Java/gj/201311/27267

  • 上一篇:知道源代碼有什麽好處?要源代碼用了幹什麽
  • 下一篇:學習網站設計與制作應該怎麽做?
  • copyright 2024編程學習大全網