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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

volatile关键字有什么用

發布時間:2023/11/29 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 volatile关键字有什么用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題:volatile關鍵字有什么用

在工作的時候,我碰到了volatile關鍵字。但是我不是非常了解它。我發現了這個解釋

這篇文章已經解釋了問題中的關鍵字的細節了,你們曾經用過它嗎或者見過正確使用這個關鍵字的樣例

回答

  • Java中同步的實現大多是通過關鍵字synchronized和volatile和鎖

  • 在Java里面,我們沒有 synchronized 的變量。對一個變量使用 synchronized 關鍵字是非法的,會導致編譯錯誤的。我們可以使用volatile變量而不是synchronized變量,volatile變量會讓JVM里面的線程去主存中讀取volatile 變量的值并且不在本地副本里面緩存

  • 如果一個變量沒有被多個線程共享,那就不需要使用volatile關鍵字了。

  • volatile使用的例子:

    public class Singleton {private static volatile Singleton _instance; // volatile variablepublic static Singleton getInstance() {if (_instance == null) {synchronized (Singleton.class) {if (_instance == null)_instance = new Singleton();}}return _instance;} }

    我們在第一次使用的時候才創建這個實例

    如果我們沒有給這個變量加volatile,那么創建單例的那個線程就沒辦法和其他線程通信。如果線程A在創建一個單例,在創建完單例以后,cpu炸了,那么其他線程就看不到這個實例了,它們就覺得這個實例還是空的。

    為什么會發生這種情況?因為讀線程沒有加鎖,直到寫線程來到了同步代碼塊,內存沒有被同步,實例的值還未被刷新到主存里。在 Volatile關鍵字以后,這就由Java自身處理,這樣的更新是對所有的讀線程可見的

    Conclusion: volatile 關鍵字也可以用于多個線程在主存的通信

    不使用volatile的例子:

    public class Singleton{ private static Singleton _instance; //without volatile variablepublic static Singleton getInstance(){ if(_instance == null){ synchronized(Singleton.class){ if(_instance == null) _instance = new Singleton(); } } return _instance; }

    文章翻譯自Stack Overflow:https://stackoverflow.com/questions/106591/what-is-the-volatile-keyword-useful-for

    總結

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

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