2. Thread Safety

What is Thread Safety?

-首先,重要的是如何定義'正確性'
-正確性即是:當我們使用他時,我們知道他應(yīng)該如何運轉(zhuǎn)。例如,我們有一個add(x,y)方法,那么我們知道他時做x和y的加法而不是其他的。
-線程安全的含義即是:當在多線程中使用他時,他的行為還是正確的。

<b>a class is thread‐safe when it continues to behave correctly when accessed from multiple threads. </b>A class is thread‐safe if it behaves correctly when accessed from multiple threads, regardless of the scheduling or interleaving of the execution of those threads by the runtime environment, and with no additional synchronization or other coordination on the part of the calling code.

<b>PS.</b>Stateless objects are always thread‐safe.


Race Condition

競態(tài)條件(Race Condition)是指,某些條件由于不恰當?shù)膱?zhí)行時序,出現(xiàn)不恰當?shù)慕Y(jié)果的一種情況。

最常見的競態(tài)條件是[先判斷狀態(tài),然后執(zhí)行的場景]。
比如實例初始化,兩個實例同時初始化,他們都判斷當前沒有實例,所以他們都做了初始化操作,這是就出現(xiàn)了兩個實例,這一般不是期望的結(jié)果。(一般的,得到一個實例是希望得到一個類的單一實例對象。)


Intrinsic Locks

內(nèi)置鎖(Intrinsic Locks)是一種java本身帶有的鎖,由兩部分組成,一是一個object作為鎖(lock);一個是被這個鎖包裹的代碼塊。Eg.

synchronized (<b>lock_part1</b>) {
// Access or modify shared state guarded by lock_part2
<b>doSomething...</b>
}

ps. 以關(guān)鍵字synchronized修飾的function是一個跨越整個方法體的代碼塊,他的鎖是方法調(diào)用所在的對象。

Intrinsic Locks -> Reentrancy

內(nèi)置鎖的特性包括可重入(Reentrancy),可重入的意思是,這個鎖可以被同一個線程多次進入,這樣的特性使得內(nèi)置鎖的線程安全維度是線程級別而不是調(diào)用級別。

Reentrancy means that locks are acquired on a<b> per‐thread</b> rather than per‐invocation basis. Reentrancy is implemented by associating with each lock an acquisition count and an owning <b>thread</b>.

Locking and Visibility

共享同一個變量時,要求所有線程在同一個鎖上同步。

volatile

一種比synchronized要輕的同步機制

3.5.4

update

  1. 20170409 初稿.
  2. 20170410 新增intrinsic locks,reentrancy讀書筆記.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容