操作時間的先後順序和先行發生(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時間伺服器優先順序配置伺服器
- 【PB】事件的觸發時機及先後順序事件
- 時間複雜度和空間複雜度 順序時間複雜度
- python if語句有先後順序嗎Python
- 順序控制和狀態機之間的差別
- mysql時間操作(時間差和時間戳和時間字串的互轉)MySql時間戳字串
- Git調整commit之間順序GitMIT
- 不同順序InBoundHandler之間的資料傳遞
- C++操作符的優先順序C++
- [譯] 時間順序的價格異常檢測
- 分散式系統理論基礎 - 時間、時鐘和事件順序分散式事件
- 併發請求的優先順序
- Java初始化靜態變數的時間順序Java變數
- 分散式系統理論基礎3: 時間、時鐘和事件順序分散式事件
- Win7下同時使用有線和無線時的優先順序設定Win7
- ntpdate同步時間沒有反應
- CSS之CSS和html整合方式及優先順序CSSHTML
- Java之執行緒的優先順序Java執行緒
- 【Oracle】-【插入讀取順序】-插入讀取之間的順序關係Oracle
- php名稱空間的呼叫順序PHP
- [java基礎] 之 表示式和運算子的優先順序Java
- HttpClient和HttpGet 引數的優先順序HTTPclient
- 誰說程式猿沒有時間健身?
- mac os 工作空間 桌面順序Mac
- UPDATE從左向右,變數優先,逐行更新.順序執行的,可以交換兩列之間的值變數
- CSS優先順序CSS
- js中拼接字串時,onclick順序亂了不執行時間JS字串
- SAP ABAP 報表幾個事件的先後執行順序和作用事件
- html優先順序和層疊性HTML
- Linux時間和日期操作Linux
- AI 四小龍之間沒有戰爭AI
- python運算子及優先順序順序Python
- CSS之選擇器及其優先順序CSS
- 穿越時間的引擎:解密 Kafka 訊息的時序之謎解密Kafka
- 區域性變數申請棧空間時的入棧順序變數
- 中斷優先順序
- Android 時間戳和日期之間的轉化Android時間戳