volatile 關鍵字的作用是變數在多個執行緒之間可見,但不保證資料的原子性
**:
package com.jvm.test;
class threadvolatiledemo extends thread
system.out.println("執行緒停止");
}public void setruning(boolean flag)
}public class threadvolatile
}
執行結果:
注意雖然將結果設定為fasle但是還一直在執行
原因:執行緒之間是不可見的,讀取的是副本,沒有及時讀取到主記憶體結果。
解決辦法使用volatile關鍵字將解決執行緒之間可見性, 強制執行緒每次讀取該值的時候都去「主記憶體」中取值
新增volatile關鍵字後:
執行結果:
正常結束
僅靠volatile
不能保證執行緒的安全性。(原子性) ①
volatile
輕量級,只能修飾變數。
synchronized
重量級,還可修飾方法 ②
volatile
只能保證資料的可見性,不能用來同步,因為多個執行緒併發訪問
volatile
修飾的變數不會阻塞。
synchronized
不僅保證可見性,而且還保證原子性,因為,只有獲得了鎖的執行緒才能進入臨界區,從而保證臨界區中的所有語句都全部執行。多個執行緒爭搶
synchronized鎖物件時,會出現阻塞。
多執行緒 volatile關鍵字
在多執行緒中,volatile關鍵字是很重要的乙個知識點,在多執行緒共享資源的時候,每個執行緒資料對外都是不可見的,這就容易出現 髒讀 現象,其實就是執行緒私有堆疊中的資料和公共堆疊中的資料不同步造成的.解決這樣的問題,就要使用volatile關鍵字了。那valotitle關鍵字有什麼用,他是強制執...
多執行緒之volatile關鍵字
現代計算機都是馮諾依曼結構的 volatile 變數具備兩種特性,其一是保證該變數對所有執行緒可見,這裡的可見性指的是當乙個執行緒修改了變數的值,那麼新的值對於其他執行緒是可以立即獲取的。其二 volatile 禁止了指令重排。多執行緒的執行可能造成變數資料的不一致 把該變數宣告為volatile ...
JAVA多執行緒之 volatile關鍵字
概要 public class mythread implements runnable override public void run system.out.println 終止執行。public static void main string args throws interruptedex...