第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這段代碼中內(nèi)部類inner的對象鎖起到的作用?

這段代碼中內(nèi)部類inner的對象鎖起到的作用?

呼啦一陣風(fēng) 2019-03-13 18:13:16
代碼如下package synchron;public class Thread3 {     class  Inner {          private void m4t1() {               int i = 5;               while(i-- > 0) {                    System.out.println(Thread.currentThread().getName() + " : Inner.m4t1()=" + i);                    try {                         Thread.sleep(500);                    } catch(InterruptedException ie) {                    }               }          }          private void m4t2() {               int i = 5;               while(i-- > 0) {                    System.out.println(Thread.currentThread().getName() + " : Inner.m4t2()=" + i);                    try {                         Thread.sleep(500);                    } catch(InterruptedException ie) {                    }               }          }     }        private void m4t1(Inner inner) {          synchronized(inner) { //使用對象鎖          inner.m4t1();         }    }     private void  m4t2(Inner inner) {          inner.m4t2();     }     public static void main(String[] args) {          final Thread3 myt3 = new Thread3();          final Inner inner = myt3.new Inner();          Thread t1 = new Thread( new Runnable() {public void run() { myt3.m4t1(inner);} }, "t1");          Thread t2 = new Thread( new Runnable() {public void run() { myt3.m4t2(inner);} }, "t2");          t1.start();          t2.start();  } }輸出如下t1 : Inner.m4t1()=4t2 : Inner.m4t2()=4t1 : Inner.m4t1()=3t2 : Inner.m4t2()=3t1 : Inner.m4t1()=2t2 : Inner.m4t2()=2t1 : Inner.m4t1()=1t2 : Inner.m4t2()=1t1 : Inner.m4t1()=0t2 : Inner.m4t2()=0對于在m4t1中的對象鎖,我不是很理解, 傳入m4t1(),m4t2()的是同一個inner對象,m4t1已經(jīng)將對象inner鎖住, 為什么t2還可以訪問m4t2呢? 希望可以有大神詳細(xì)解釋一下, 謝謝
查看完整描述

4 回答

?
LEATH

TA貢獻1936條經(jīng)驗 獲得超7個贊

因為synchronized鎖的是inner對象,m4t2沒去synchronized(inner)所以也不會去試圖遵守鎖的規(guī)則


查看完整回答
反對 回復(fù) 2019-04-18
?
狐的傳說

TA貢獻1804條經(jīng)驗 獲得超3個贊

你把m4t2方法改成這樣


private void  m4t2(Inner inner) {

    synchronized(inner) {

        inner.m4t2();

    }

}

這個inner鎖才起效果。


因為你現(xiàn)在的m4t2方法是不需要拿鎖就可以執(zhí)行的,鎖起的作用是保證對需要拿鎖才能執(zhí)行的代碼在多線程執(zhí)行的時候能保證順序,對于不需要拿鎖就可以執(zhí)行的代碼是不受限制的。


查看完整回答
反對 回復(fù) 2019-04-18
?
不負(fù)相思意

TA貢獻1777條經(jīng)驗 獲得超10個贊

這里跟inner 沒有關(guān)系 因為 t2訪問Thread3的m4t2方法不是一個 synchronized 方法 所以不需要獲得inner對象的鎖,所以不會進入鎖隊列 所以很自由 是一個單獨的個體


查看完整回答
反對 回復(fù) 2019-04-18
?
30秒到達(dá)戰(zhàn)場

TA貢獻1828條經(jīng)驗 獲得超6個贊

鎖對象和對象實例在堆中不是在一起的,鎖對象在“對象頭”中。


查看完整回答
反對 回復(fù) 2019-04-18
  • 4 回答
  • 0 關(guān)注
  • 491 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號