91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java volatile關鍵字怎么使用

發布時間:2021-12-14 14:51:01 來源:億速云 閱讀:99 作者:iii 欄目:大數據

本篇內容主要講解“java volatile關鍵字怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java volatile關鍵字怎么使用”吧!

volatile基本介紹

volatile可以看成是synchronized的一種輕量級的實現,但volatile并不能完全代替synchronized,volatile有synchronized可見性的特性,但沒有synchronized原子性的特性。可見性即用volatile關鍵字修飾的成員變量表明該變量不存在工作線程的副本,線程每次直接都從主內存中讀取,每次讀取的都是最新的值,這也就保證了變量對其他線程的可見性。另外,使用volatile還能確保變量不能被重排序,保證了有序性。

volatile只用修飾一個成員變量,如:private volatile balance;

volatile比synchronized編程更容易且開銷更小,但具有一點的使用局限性,使用要相當小心,不能當鎖使用。volatile不會像synchronized一樣阻塞程序,如果是讀操作遠多于寫操作的情況可以建議使用volatile,它會有更好的性能。

volatile使用場景

如果正確使用volatile的話,必須依賴下以下種條件:

1、對變量的寫操作不依賴當前變量的值;

2、該變量沒有包含在其他變量的不變式中。

第1個條件就說明了volatile不是原子性的操作,不能使用n++類似的計數器,它不是線程安全的。

1、狀態的改變

有些場景肯定會有狀態的改變,完成一個主線程的停止等。首先我們開啟了一個無限循環的主線程,判斷變量isStop變量是否為true,如果true的話就退出程序,否則就一直循環,所以這個isStop的值是別的線程改變的。

java volatile關鍵字怎么使用

上面這段程序如果不加volatile的話會一直卡在循環,此時的線程拿到的值永遠為false,加了volatile3秒后就輸出stop,所以這段程序很好的解釋了可見性的特點。

2、讀多寫少的情況

假設這樣一種場景,有N個線程在讀取變量的值,只有一個線程寫變量的值,這時候就能保證讀線程的可見性,又能保證寫線程的線程安全問題。

像n++不是原子類的操作,其實可以通過synchronized對寫方法鎖住,再用volatile修飾變量,這樣就保證了讀線程對變量的可見性,又保證了變量的原子性。

java volatile關鍵字怎么使用

如果n不加volatile,程序將一直循環,不能輸出stop,也就是此時的線程拿到的值永遠為0。當然不加volatile,對獲取n的方法進行synchronized修飾也是能及時獲取最新值的,但是性能會遠低于volatile。

到此,相信大家對“java volatile關鍵字怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

茌平县| 延吉市| 霍林郭勒市| 文安县| 博罗县| 阳谷县| 武义县| 花莲县| 册亨县| 卫辉市| 兰坪| 平果县| 武冈市| 葫芦岛市| 潮州市| 满洲里市| 斗六市| 太湖县| 绿春县| 定州市| 锡林郭勒盟| 长垣县| 元谋县| 綦江县| 罗江县| 凌云县| 平舆县| 龙山县| 凤冈县| 寿宁县| 桦甸市| 新晃| 清镇市| 大理市| 神农架林区| 蓬安县| 襄樊市| 望奎县| 泸西县| 台安县| 河源市|