Volatile關鍵字的最佳實踐

2021-09-19 06:48:30 字數 760 閱讀 6638

本文主要總結常用的volatile方式。

1. 迴圈檢測(單純寫,單純讀,不涉及變數的複雜操作)

private volatile boolean stop = false;

// 執行在多個執行緒中

void dosomework()

}// 執行在多個執行緒中

void stop()

為什麼這個是最佳實踐呢?

原因是相對於使用鎖來說,volatile的讀取效率很高,但是寫的效率不一定很高。

因為在實際執行的彙編**中會加入lock標記,防止重排序,這就增加了寫的負擔。

但是以上的最佳實踐,剛好利用了這個特點。

我們在控制線程的開始和結束的時候,往往會加乙個控制變數,會經常的讀,但寫可能只會發生一次,這正好符合這個特點。

最佳實踐就是——這樣用保證沒有錯。

除此之外,使用volatile的過程中還要注意這些。

2. 雙重檢測鎖

private volatile static singleton singleton;

public static singleton getinstance()}}

return singleton;

}

此種最佳實踐的原因是volatile可以禁止指令重排序(物件在初始化的時候會出現重排序的優化)

可以防止多執行緒在獲取單例物件是空指標的異常。

關鍵字 volatile關鍵字的作用

1.volatile關鍵字是防止在共享的空間發生讀取的錯誤。只保證其可見性,不保證原子性 使用volatile指每次從記憶體中讀取資料,而不是從編譯器優化後的快取中讀取資料,簡單來講就是防止編譯器優化。2.在單任務環境中,如果在兩次讀取變數之間不改變變數的值,編譯器就會發生優化,會將ram中的值賦值...

關鍵字volatile詳解

與關鍵字const一樣,關鍵字volatile也是乙個型別修飾符 type specifier 關於volatile的作用 例如程式清單 volatile int m 10 int k,n m k i volatile將告訴編譯器,整形變數m是隨時發生變化的,每次使用m的時候,都要求從m的位址中找出...

volatile關鍵字 詳解

volatile 關鍵字 volatile關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改,比如 作業系統 硬體或者其它執行緒等。遇到這個關鍵字宣告的變數,編譯器對訪問該變數的 就不再進行優化,從而可以提供對特殊位址的穩定訪問。使用該關鍵字的例子如下 int volati...