最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java線程之Happens before規(guī)則案例詳解

 更新時間:2022年08月03日 11:43:44   作者:ABestRookie  
這篇文章主要為大家介紹了java線程之Happens-before規(guī)則,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>

正文

happens-before 規(guī)定了對共享變量的寫操作對其它線程的讀操作可見,它是可見性與有序性的一套規(guī)則總結,拋開以下 happens-before 規(guī)則,JMM 并不能保證一個線程對共享變量的寫,對于其它線程對該共享變量的讀可見.

案例1

線程解鎖 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
*/

案例2

線程對 volatile 變量的寫,對接下來其它線程對該變量的讀可見

    volatile static int x;
    new Thread(()->{
     x = 10;
    },"t1").start();

    new Thread(()->{
     System.out.println(x);
    },"t2").start();
/*
運行結果:
10
*/

案例3

線程 start 前對變量的寫,對該線程開始后對該變量的讀可見

static int x;
x = 10;
new Thread(()->{
 System.out.println(x);
},"t2").start();
/*
運行結果:
10
*/

案例4

線程結束前對變量的寫,對其它線程得知它結束后的讀可見(比如其它線程調用 t1.isAlive() 或 t1.join()等待 它結束)

static int x;
Thread t1 = new Thread(()->{
 x = 10;
},"t1");
t1.start();
t1.join();
System.out.println(x);
/*
運行結果:
10
*/

案例5

線程 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
*/

案例6

對變量默認值(0,false,null)的寫,對其它線程對該變量的讀可見

    static int a;
    public static void main(String[] args) {
        new Thread(()->{
            System.out.println(a);
        }).start();

    }
/*
運行結果:
0
*/

案例7

具有傳遞性,如果 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規(guī)則的詳細內容,更多關于線程Happens-before規(guī)則的資料請關注腳本之家其它相關文章!

相關文章

  • Spring 整合多個配置文件的方法

    Spring 整合多個配置文件的方法

    在一些大型應用中,可能存在多個配置文件,這篇文章給大家介紹了Spring 整合多個配置文件的方法,非常不錯,具有一定的參考借鑒價值,感興趣的朋友一起看看吧
    2018-05-05
  • IDEA2023常用配置指南(JDK/系統(tǒng)設置等常用配置)

    IDEA2023常用配置指南(JDK/系統(tǒng)設置等常用配置)

    idea很強大,但是初次安裝默認的有很多設置并不是滿足我們開發(fā)的需要,下面這篇文章主要給大家介紹了關于IDEA2023常用配置(JDK/系統(tǒng)設置等常用配置)的相關資料,需要的朋友可以參考下
    2023-12-12
  • Java?-jar參數(shù)設置小結

    Java?-jar參數(shù)設置小結

    本文主要介紹了Java?-jar參數(shù)設置小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • java解析xml的4種方式的優(yōu)缺點對比及實現(xiàn)詳解

    java解析xml的4種方式的優(yōu)缺點對比及實現(xiàn)詳解

    這篇文章主要介紹了java解析xml的4種方式的優(yōu)缺點對比及實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • java使用JMF實現(xiàn)音樂播放功能

    java使用JMF實現(xiàn)音樂播放功能

    這篇文章主要為大家詳細介紹了java使用JMF實現(xiàn)音樂播放的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 修改idea運行內存大小的方法總結

    修改idea運行內存大小的方法總結

    在開發(fā)過程中,總會遇到idea運行內存不足,所以本文小編給大家介紹了修改idea運行內存大小的兩種方法,文中通過圖文給大家講解的非常詳細,需要的朋友可以參考下
    2023-12-12
  • Java編程通過list接口實現(xiàn)數(shù)據(jù)的增刪改查代碼示例

    Java編程通過list接口實現(xiàn)數(shù)據(jù)的增刪改查代碼示例

    這篇文章是介紹Java編程基礎方面的內容,涉及l(fā)ist接口的操作,通過list接口實現(xiàn)對數(shù)據(jù)的增刪改查的相關代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • java String 可變性的分析

    java String 可變性的分析

    這篇文章主要介紹了java String 可變性的分析的相關資料,通常大家都認為java String 是不可變的,這里分析下源碼來說明它的可變性,需要的朋友可以參考下
    2017-03-03
  • Spring中@Autowire注入的深入講解

    Spring中@Autowire注入的深入講解

    這篇文章主要給大家介紹了關于Spring中@Autowire注入的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Java實現(xiàn)學生管理系統(tǒng)

    Java實現(xiàn)學生管理系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)學生管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評論

集贤县| 泰和县| 乐亭县| 高台县| 洮南市| 霍山县| 铁岭县| 南部县| 镇坪县| 盐边县| 集安市| 南雄市| 西乌珠穆沁旗| 邯郸县| 湘阴县| 新昌县| 汉寿县| 栾城县| 磐石市| 无极县| 凤冈县| 石泉县| 辽阳县| 康乐县| 西和县| 万州区| 庄河市| 阳西县| 通道| 云浮市| 娄底市| 陇川县| 阜南县| 石台县| 榕江县| 龙口市| 丹凤县| 阳春市| 肥西县| 吴江市| 泰顺县|