我的Java路上那些事兒

          快樂(lè)成長(zhǎng)
          posts - 110, comments - 101, trackbacks - 0, articles - 7
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          public synchronized void methodA(int a, int b);

          public synchronized void methodB(int a){
          methodA(a, 0);
          }

          這樣的代碼是成立的,一個(gè)線程對(duì)同一個(gè)對(duì)象的鎖可以反復(fù)獲取。這種同步鎖稱為可重入的鎖。
          加在非static方法上的synchronized方法是和synchronized(this)塊等價(jià)的,均為對(duì)象鎖,即對(duì)this加鎖。
          獲得當(dāng)前對(duì)象鎖的線程,可以繼續(xù)獲得當(dāng)前對(duì)象鎖,JVM負(fù)責(zé)跟蹤對(duì)象被加鎖的次數(shù)。線程運(yùn)行B方法,此時(shí)如果this鎖可以用,線程獲得該鎖,線程給對(duì)象加鎖,計(jì)數(shù)器變成1,然后B方法調(diào)用A方法,由于是對(duì)同一個(gè)對(duì)象同一個(gè)線程,線程可以繼續(xù)獲得鎖,計(jì)數(shù)器變?yōu)?,表示this被加鎖2次。A方法完畢后,線程釋放鎖,計(jì)數(shù)器變?yōu)?,此時(shí)對(duì)象鎖對(duì)其他線程依然是不可獲得的。B方法完畢后,線程繼續(xù)釋放鎖,此時(shí)計(jì)數(shù)器變?yōu)?,表示鎖被完全釋放,其他線程可以獲得對(duì)象鎖。

          public synchronized void methodA(int a, int b){

          }


          public synchronized void methodB(int a, int b){

          }

          以上兩方法在同一實(shí)例對(duì)象上是互斥的,synchronized 加在方法上 即對(duì)this加鎖,因此在同一實(shí)例對(duì)象上 兩方法是互斥的。



          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 辽宁省| 柞水县| 丹东市| 恭城| 互助| 麻栗坡县| 德安县| 随州市| 德令哈市| 富顺县| 江达县| 江源县| 平遥县| 周口市| 南陵县| 兰溪市| 锡林浩特市| 泰兴市| 平泉县| 肃北| 赤水市| 武宁县| 芷江| 白河县| 上饶县| 柯坪县| 永修县| 九龙城区| 卢氏县| 乌兰察布市| 册亨县| 双辽市| 大英县| 霍邱县| 平南县| 崇信县| 喀什市| 容城县| 衡水市| 平山县| 房产|