日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中的volatile关键字

發布時間:2025/3/20 java 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中的volatile关键字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原博文地址:http://www.cnblogs.com/dolphin0520/p/3920373.html
這里只是對上面的博文的一個簡單總結,總結如下:

volatile變量保證可見性實現

volatile變量保證了不同線程對這個變量進行操作時的可見性,即一個線程修改了某個變量的值,這新值對其他線程來說是立即可見的。如何實現:
1. volatile變量規則:對一個變量的寫操作先行發生于后面對這個變量的讀操作
2. volatile關鍵字會強制將修改的值立即寫入主存;
3. 當一個線程將共享變量的值修改并將結果同步到主內存當中后,其他線程工作內存當中的緩存值就會失效,即共他線程想再次從自己的工作內存當中讀取該變量進行操作時就會失敗,而是需要從新從主內存當中讀取。當然,如果某個線程已經在自己的自己的工作內存當中讀到了該變量的舊值,那么后面操作該變量的值還是以前的值。所以在多個線程對一個變量進行自增時,總是會出現比預期值要小的結果。對示例作了圖片化:
示例代碼:

public class Test {public volatile int inc = 0;public void increase() {inc++;}public static void main(String[] args) {final Test test = new Test();for(int i=0;i<10;i++){new Thread(){public void run() {for(int j=0;j<1000;j++)test.increase();};}.start();}while(Thread.activeCount()>1) //保證前面的線程都執行完Thread.yield();System.out.println(test.inc);} }

示例圖片:

 假如某個時刻,每個線程緩存的變量i的值都是從主內存當中讀到的10。
 線程1在從自己的緩存當中讀到10,還未進行自增操作時線程1被阻塞了;
 當然后線程2對變量進行讀取并自增,并把11寫入工作內存,最后寫入到主存。
然后線程1接著進行加1操作,然后將11寫入工作內存,最后寫入主存。

  那么兩個線程分別進行了一次自增操作后,i只增加了1。

  所以,在多線程下對某個int類型的變量值時,使用volatile沒有任何用,Java提供了AtomicInteger這種安全的類型,其他基本類型也有對應的安全類。
 

volatile關鍵字適用場景

1.狀態標記量

有了它修飾才能中斷

volatile boolean flag = false;while(!flag){doSomething(); }public void setFlag() {flag = true; } volatile boolean inited = false; //線程1: context = loadContext(); inited = true; //線程2: while(!inited ){ sleep() } doSomethingwithconfig(context);

2.雙重鎖

class Singleton{private volatile static Singleton instance = null;private Singleton() {}public static Singleton getInstance() {if(instance==null) {synchronized (Singleton.class) {if(instance==null)instance = new Singleton();}}return instance;} } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Java中的volatile关键字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。