對基本資料型別的變數讀取和賦值是保證了原子性的,要麼都成功,要麼都失敗,這些操作不可中斷。
比如 i = 10
a = 10 原子性
b=a 不滿足 read a , 賦值 b
c++ 不滿足 read c ; add , 賦值 c
c=c+1 不滿足 read c;add; 賦值 c
可以使用volatile 關鍵字保證可見性
什麼是可見性,兩個執行緒分別從主記憶體中獲取資料,快取到自己快取區中,乙個執行緒對資料進行改變了,另乙個執行緒立馬可以感應到,這叫做可見性,可以使用volatile 關鍵字進行修飾所操作的資料。
1 **的執行順序,編寫的前的發生在編寫後面的
2 unlock 必須發生在lock後
3 volatile 修飾的變數,對乙個變數的寫操作先於讀操作
3 傳遞規則,操作a先於b,b先於c,那麼a肯定先於c
4 執行緒啟動規則,start先於run
5 執行緒中斷規則,interrupt 這個動作,必須發生在捕獲該動作之前。
6 物件銷毀規則,初始化發生在finalize之前
1 保證重排序的是不會把指令放到屏障的前面,也不會把前面的放在後面。
2 強制對快取的修改操作立刻寫入主記憶體。
3 如果是寫操作,它會導致其他cpu中的快取失效。
一旦乙個貢獻變數被volatile修飾,具備兩層含義
1 保證了不同執行緒間的可見性
2 禁止對其進行重排序,也就是保證了有序性
3 並未保證原子性
三個重要概念的區分
計算機只能理解機器語言,不能理解高階語言,因此需要將高階語言轉化為計算機語言。依據語言轉化方式的不同,區分出了編譯型語言和解釋型語言。編譯型語言,指的是一次性的將高階語言轉化為計算機語言,此類程式執行前會將源 編譯為機器語言的檔案,如exe格式的檔案。如要執行,直接執行exe檔案即可,不需要再次編譯...
java併發程式設計中的三個概念
在併發程式設計中,我們通常會遇到以下三個問題 原子性問題,可見性問題,有序性問題。我們先看具體看一下這三個概念 原子性 原子性 即乙個操作或者多個操作 要麼全部執行並且執行的過程不會被任何因素打斷,要麼就都不執行。乙個很經典的例子就是銀行賬戶轉賬問題 比如從賬戶a向賬戶b轉2000元,那麼必然包括2...
集線器的三個重要概念及其優缺點
集線器的概念 集線器的英文稱為 hub hub 是 中心 的意思,集線器的主要功能是對接收到的訊號進行再生整形放大,以擴大網路的傳輸距離,同時把所有節點集中在以它為中心的節點上。它工作於osi 開放系統互聯參考模型 參考模型第一層,即 物理層 集線器與網絡卡 網線等傳輸介質一樣,屬於區域網中的基礎裝...