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

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

關(guān)于多線程之間變量的可見性

關(guān)于多線程之間變量的可見性

慕粉3291149 2019-05-06 09:21:03
package?com.example.demo.synchronized_test; import?lombok.Data; public?class?Test2?{ ????public?static?void?main(String[]?args)?throws?InterruptedException?{ ????????S?s?=?new?S(); ????????if(s.isFlag()){ ????????????System.out.println("flag?is?true"); ????????} ????????T1?t1?=?new?T1(s); ????????t1.start(); ????????Thread.sleep(500); ????????T2?t2?=?new?T2(s); ????????t2.start(); ????????Thread.sleep(500); ????????if(s.isFlag()){ ????????????System.out.println("flag?is?true"); ????????}else{ ????????????System.out.println("flag?is?false"); ????????} ????} } @Data class?S{ ????private?boolean?flag?=?true; } class?T1?extends?Thread{ ????private?S?s; ????public?T1(S?s)?{ ????????this.s?=?s; ????} ????@Override ????public?void?run()?{ ????????System.out.println("begin?t1?..."); ????????while(s.isFlag()){ ????????} ????????System.out.println("end?t1?..."); ????} } class?T2?extends?Thread{ ????private?S?s; ????public?T2(S?s)?{ ????????this.s?=?s; ????} ????@Override ????public?void?run()?{ ????????s.setFlag(false); ????} } 程序運行結(jié)果,如下圖所示:有個疑問,t1線程和main線程應(yīng)該都感知不到t2線程對變量flag的修改,但是結(jié)果證明t1線程感知不到,但是main線程能感知到,這時為什么呢
查看完整描述

3 回答

已采納
?
慕無忌7406412

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

你為什么會覺得t1線程和t2線程都感知不到s里面的flag變量呢?其實它們兩個都能感知得到,你只需要把你t1里面的run方法改一下,就可以知道.見下圖:

https://img1.sycdn.imooc.com//5cf0969d000190b404960562.jpg

https://img1.sycdn.imooc.com//5cf096a100017fa305990215.jpg


查看完整回答
1 反對 回復 2019-05-31
  • 慕粉3291149
    慕粉3291149
    你好,按照你說的確實可以,但是我不太懂為什么會這樣,Thread.sleep()的作用難道是讓出cpu,讓cpu有時間去從主內(nèi)存中拿到最新的值嗎
  • 3 回答
  • 0 關(guān)注
  • 1028 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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