<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
happens-before 規定了對共用變數的寫操作對其它執行緒的讀操作可見,它是可見性與有序性的一套規則總結,拋開以下 happens-before 規則,JMM 並不能保證一個執行緒對共用變數的寫,對於其它執行緒對該共用變數的讀可見.
執行緒解鎖 m 之前對變數的寫,對於接下來對 m 加鎖的其它執行緒對該變數的讀可見
static int x; static Object m = new Object(); new Thread(()->{ synchronized(m) { x = 10; } },"t1").start(); new Thread(()->{ synchronized(m) { System.out.println(x); } },"t2").start(); /* 執行結果: 10 */
執行緒對 volatile 變數的寫,對接下來其它執行緒對該變數的讀可見
volatile static int x; new Thread(()->{ x = 10; },"t1").start(); new Thread(()->{ System.out.println(x); },"t2").start(); /* 執行結果: 10 */
執行緒 start 前對變數的寫,對該執行緒開始後對該變數的讀可見
static int x; x = 10; new Thread(()->{ System.out.println(x); },"t2").start(); /* 執行結果: 10 */
執行緒結束前對變數的寫,對其它執行緒得知它結束後的讀可見(比如其它執行緒呼叫 t1.isAlive() 或 t1.join()等待 它結束)
static int x; Thread t1 = new Thread(()->{ x = 10; },"t1"); t1.start(); t1.join(); System.out.println(x); /* 執行結果: 10 */
執行緒 t1 打斷 t2(interrupt)前對變數的寫,對於其他執行緒得知 t2 被打斷後對變數的讀可見(通過 t2.interrupted 或 t2.isInterrupted)
static int x; public static void main(String[] args) { Thread t2 = new Thread(()->{ while(true) { if(Thread.currentThread().isInterrupted()) { System.out.println(x); break; } } },"t2"); t2.start(); new Thread(()->{ sleep(1); x = 10; t2.interrupt(); },"t1").start(); while(!t2.isInterrupted()) { Thread.yield(); } System.out.println(x); } /* 執行結果: 10 */
對變數預設值(0,false,null)的寫,對其它執行緒對該變數的讀可見
static int a; public static void main(String[] args) { new Thread(()->{ System.out.println(a); }).start(); } /* 執行結果: 0 */
具有傳遞性,如果 x hb-> y 並且 y hb-> z 那麼有 x hb-> z ,配合 volatile 的防指令重排,有下面的例子
volatile static int x; static int y; new Thread(()->{ y = 10; x = 20; },"t1").start(); new Thread(()->{ // x=20 對 t2 可見, 同時 y=10 也對 t2 可見 System.out.println(x); },"t2").start(); /* 執行結果: 20 */
以上就是java執行緒之Happens-before規則的詳細內容,更多關於執行緒Happens-before規則的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45