volatile和synchronized的區別

2021-06-30 16:17:37 字數 1075 閱讀 6769

關於可見性的問題:

可見性:

即當讀寫兩個執行緒同時訪問同乙個變數時,用於確保寫執行緒更新變數後,讀執行緒再訪問該 變數時可以讀取到該變數最新的值。

volatile和synchronized的區別:

1.volatile本質是在告訴jvm當前變數在暫存器(工作記憶體)中的值是不確定的,需要從主存中讀取;synchronized則是鎖定當前變數,只有當前執行緒可以訪問該變數,其他執行緒被阻塞住。

2.volatile僅能使用在變數級別;synchronized則可以使用在變數、方法、和類級別的。

3.volatile僅能實現變數的修改可見性,並能保證原子性;而synchronized則可以保證變數的修改可見性和原子性。

4.volatile不會造成執行緒的阻塞;synchronized可能會造成執行緒的阻塞。

5.volatile標記的變數不會被編譯器優化;synchronized標記的變數可以被編譯器優化。

關於可見性的問題:

可見性:

即當讀寫兩個執行緒同時訪問同乙個變數時,用於確保寫執行緒更新變數後,讀執行緒再訪問該 變數時可以讀取到該變數最新的值。

volatile和synchronized的區別:

1.volatile本質是在告訴jvm當前變數在暫存器(工作記憶體)中的值是不確定的,需要從主存中讀取;synchronized則是鎖定當前變數,只有當前執行緒可以訪問該變數,其他執行緒被阻塞住。

2.volatile僅能使用在變數級別;synchronized則可以使用在變數、方法、和類級別的。

3.volatile僅能實現變數的修改可見性,並能保證原子性;而synchronized則可以保證變數的修改可見性和原子性。

4.volatile不會造成執行緒的阻塞;synchronized可能會造成執行緒的阻塞。

5.volatile標記的變數不會被編譯器優化;synchronized標記的變數可以被編譯器優化。

volatile和synchronize的區別

1.對變數的寫入操作不依賴變數的當前值,或者你能確保只有單個執行緒更新變數的值。2.該變數沒有包含在具有其他變數的不變式中。volatile僅能使用在變數級別 synchronized則可以使用在變數 方法 和類級別的 volatile僅能實現變數的修改可見性,不能保證原子性 而synchroniz...

volatile和synchronized的區別

public class runthread extends thread public void setrunning boolean isrunning override public void run system.out.println 執行緒執行完成了 public class run c...

volatile和synchronized的區別

volatile和synchronized的區別 1.volatile本質是在告訴jvm當前變數在暫存器 工作記憶體 中的值是不確定的,需要從主存中讀取 synchronized則是鎖定當前變數,只有當前執行緒可以訪問該變數,其他執行緒被阻塞住。2.volatile僅能使用在變數級別 synchro...