操作時間的先後順序和先行發生(happens-before)之間沒有必
**happens-before原則的作用:判斷兩個操作之間是否存在衝突。如果符合happens-before規則,是不存在衝突。不符合happens-before規則,就需要自己處理執行緒安全的問題。
操作時間的先後順序和先行發生(happens-before)之間沒有必然關係?
也就是先行發生(happens - before)原則,不是說執行的時間順序。這句話怎麼理解。
例如:一個執行緒執行 i = 1 ; j =2;
按照happens-before原則中的程式次序原則(一般是程式碼在前先執行原則),i =1 操作先行於 j = 2;
但cpu完全有可能先執行i的初始化為0,然後cpu執行完 j = 2 再執行,i = 1,這樣的結果也是正確的。所以說時間上先執行的, 並沒有先行發生。
happens-before原則的: 以下幾條操作是不需要考慮執行緒安全問題的,
程式次序規則(program order rule): 在一個執行緒內,先在前面的程式碼操作先行。準確的說控制流順序而不是程式碼順序。需要考慮分支,迴圈等結構。
管程鎖定規則(monitor lock rule):同一個資源鎖,先unlock,之後才能lock。
Volatile變數規則(volatile variable rule):一個變數被volatile修飾,多執行緒操作,先執行操作,再執行讀操作。(同時寫操作只能有一個)
執行緒啟動規則(Thread start rule):Thread物件的start方法,先行發生於此執行緒的每一個方法。
執行緒終止規則(Thread Termination rule):該執行緒的所有方法,先行發生於該執行緒的終止檢測方法。例如:可以透過Thread.join方法結束,Thread.isAlive()的返回值等手段檢測到執行緒已經終止執行。
執行緒中斷規則(Thread Interruption Rule): 中斷方法先行發生於,中斷檢測方法。中斷方法interrupt(),中斷檢測interrupted()方法。
物件終結規則(finalizer rule): 一個物件的初始化完成(建構函式執行結束)先行發生於它的finalizer方法的開始。
傳遞性(Transitivity): 如果操作A先行發生於操作B,操作B先行發生於操作C,那就可以得出操作A先行發生於操作C的結論。
原文連結:https://mp.weixin.qq.com/s/jEvpE2NHFBR56-NtFwQu_A
作者:一起寫程式
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4548/viewspace-2807323/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 等級+時間的優先順序演算法演算法
- NTP時間伺服器優先順序配置伺服器
- python if語句有先後順序嗎Python
- 順序控制和狀態機之間的差別
- Git調整commit之間順序GitMIT
- mysql時間操作(時間差和時間戳和時間字串的互轉)MySql時間戳字串
- 不同順序InBoundHandler之間的資料傳遞
- [譯] 時間順序的價格異常檢測
- Java初始化靜態變數的時間順序Java變數
- 分散式系統理論基礎3: 時間、時鐘和事件順序分散式事件
- php名稱空間的呼叫順序PHP
- CSS之CSS和html整合方式及優先順序CSSHTML
- Java之執行緒的優先順序Java執行緒
- [java基礎] 之 表示式和運算子的優先順序Java
- 艾司博訊:拼多多開店後有沒有時間限制
- python運算子及優先順序順序Python
- SAP ABAP 報表幾個事件的先後執行順序和作用事件
- 穿越時間的引擎:解密 Kafka 訊息的時序之謎解密Kafka
- CSS優先順序CSS
- html優先順序和層疊性HTML
- 運算子的優先順序
- Python中操作時間之strptime()方法的使用Python
- CSS之選擇器及其優先順序CSS
- toString()和valueOf()函式呼叫和優先順序函式
- (MariaDB/MySQL)MyISAM儲存引擎讀、寫操作的優先順序MySql儲存引擎
- JS時間操作JS
- java時間操作Java
- 2.2.5排程演算法:時間片輪轉、優先順序排程、多級反饋排程演算法
- 時間相關的操作
- SpringBoot配置檔案優先順序載入順序Spring Boot
- 時間有幾種格式、相互之間如何轉換?
- 中斷優先順序
- Yacc使用優先順序
- Android程式優先順序Android
- 共享庫連結和載入時的路徑搜尋優先順序
- 時間相差秒數_Golang 時間操作大全Golang
- AI 四小龍之間沒有戰爭AI
- [譯]HTTP/2的優先順序HTTP