欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用volatile關鍵字的注意事項

 更新時間:2017年02月13日 16:17:30   投稿:mrr  
volatile關鍵字是Java中的一種稍弱的同步機制,為什么稱之為弱機制。這篇文章主要介紹了Java使用volatile關鍵字的注意事項,需要的朋友可以參考下

 Volatile 變量具有 synchronized 的可見性特性,但是不具備原子特性。這就是說線程能夠自動發(fā)現(xiàn) volatile 變量的最新值。Volatile 變量可用于提供線程安全,但是只能應用于非常有限的一組用例:多個變量之間或者某個變量的當前值與修改后值之間沒有約束。因此,單獨使用 volatile 還不足以實現(xiàn)計數(shù)器、互斥鎖或任何具有與多個變量相關的不變式。

volatile關鍵字是Java中的一種稍弱的同步機制,為什么稱之為弱機制。

 在理解這個之前,我們先來看看java在進行同步時必須遵守的兩個機制:

 1、可見性:當一個線程修改一個共享變量時,另外一個線程能讀到這個修改的值。

 2、原子性:指不可分割,此處指程序執(zhí)行過程中,某操作不能中斷,則為原子操作。

 volatile關鍵字不能保證原子性,只能保證可見性,故在一般情況下不能使用該關鍵字進行同步操作。但是當滿足以下兩個特定條件時,可以使用其進行同步:

 1、運算結果并不依賴變量的當前值,或者能夠保證只有單一的線程修改變量的值。

 2、變量不需要與其他的狀態(tài)變量共同參與不變約束

例:

volatile boolrean flag;
public void close(){
    flag = true;
}
public void open(){
   while(!flag){
    ...
   }
}

 此時open()方法的執(zhí)行依賴flag的值,必須使用同步,但是使用synchronized關鍵字或者其他方法同步比較繁瑣,此時該情景符合以上兩個條件,故可以使用volatile關鍵字進行同步。

volatile關鍵字原理:

  被volatile修飾的變量,不會被緩存在寄存器或者其他地方,每次寫直接寫去主內存,讀也是從主內存讀取。所以可以保證可見性。

以上所述是小編給大家介紹的Java使用volatile關鍵字的注意事項,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • Springboot應用中過濾器如何修改response的header和body內容

    Springboot應用中過濾器如何修改response的header和body內容

    這篇文章主要介紹了Springboot應用中過濾器如何修改response的header和body內容問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java SoftReference類案例詳解

    Java SoftReference類案例詳解

    這篇文章主要介紹了Java SoftReference類案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • feign如何打印出http請求

    feign如何打印出http請求

    這篇文章主要介紹了feign如何打印出http請求,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring?AOP實現(xiàn)用戶登錄統(tǒng)一驗證功能

    Spring?AOP實現(xiàn)用戶登錄統(tǒng)一驗證功能

    這篇文章主要為大家詳細介紹了Spring?AOP如何實現(xiàn)用戶登錄統(tǒng)一驗證功能,文中的示例代碼講解詳細,對我們學習具有一定的借鑒價值,需要的可以參考一下
    2023-01-01
  • Java lambda表達式實現(xiàn)Flink WordCount過程解析

    Java lambda表達式實現(xiàn)Flink WordCount過程解析

    這篇文章主要介紹了Java lambda表達式實現(xiàn)Flink WordCount過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • 詳談hibernate,jpa與spring?data?jpa三者之間的關系

    詳談hibernate,jpa與spring?data?jpa三者之間的關系

    這篇文章主要介紹了hibernate,jpa與spring?data?jpa三者之間的關系,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java中實現(xiàn)接口限流的方案詳解

    Java中實現(xiàn)接口限流的方案詳解

    常用的接口限流方案就是計數(shù)器限流方案、時間窗口限流方案和令牌桶限流方案等,這些方案的概念大致也知道,但是實際上也沒有實現(xiàn)過,所以本文就來自動動手實踐一下吧
    2023-05-05
  • Java內存模型中的虛擬機棧原理分析

    Java內存模型中的虛擬機棧原理分析

    這篇文章主要介紹了Java內存模型中的虛擬機棧原理分析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • CountDownLatch和Atomic原子操作類源碼解析

    CountDownLatch和Atomic原子操作類源碼解析

    這篇文章主要為大家介紹了CountDownLatch和Atomic原子操作類的源碼解析以及理解應用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • mybatis 查詢sql中in條件用法詳解(foreach)

    mybatis 查詢sql中in條件用法詳解(foreach)

    這篇文章主要介紹了mybatis 查詢sql中in條件用法詳解(foreach),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論