熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

JAVA多線程中的鎖機制

2013-11-23 19:47:43  來源: Java高級技術 

  JAVA中的每個對象都可以用作一個實現同步的鎖這種稱為內置鎖內置鎖是可重入的因此如果某個線程試圖獲取一個已經由它自己持有的鎖那麼這個請求就會成功

  重入的實現方法是為每個鎖關聯一個獲取計數值和一個所有者線程當計數值為這個鎖就是開放的當線程請求該鎖時JVM將記下鎖的持有者並且將計數值+如果同一個線程再次回去該鎖計數值繼續+通過計數值可以看出重入的次數計數值為則表示鎖已經釋放

  看一個重入鎖的實例

  class Father {

  public synchronized void doSth(){

  Systemoutprintln(Father is doSth);

  }

  }

  class Child extends Father {

  public synchronized void doSth() {

  Systemoutprintln(Child is doSth);

  superdoSth();

  }

  }

  class Father {

  public synchronized void doSth(){

  Systemoutprintln(Father is doSth);

  }

  }

  class Child extends Father {

  public synchronized void doSth() {

  Systemoutprintln(Child is doSth);

  superdoSth();

  }

  }

  以上一段代碼在執行Child類的superdoSth()方法時並不會發生死鎖現象這兩個類中的方法都是synchronized同步的因此執行前都會獲取Father的鎖正因為是可重入的才可以多次獲取該鎖不然第二次獲取該鎖時必然發生死鎖現象

  synchronized雖然提供了狀態同步的功能加鎖限制但是使用時一定要切記加鎖代碼塊的大小否則會影響性能這種同步代碼塊的大小需要去權衡


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27461.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.