讀書筆記 : 同步

>> 什麼是同步,爲啥要同步

對象可以分成兩種,一種的狀態不能被更改,另一種的狀態能被更改。

對於狀態能被更改的對象,你可能會在某個方法裏更改它的狀態。在更改進行到一半的時候,對象可能處在一種“不穩定的狀態”。

比如說,有個類叫Name,裏面存了姓 surName 和名 firstName,然後你把一個姓“韓”名“跑跑”的對象改成姓“忘”名“老魔”,你在方法裏先去把它的 surName 從“韓”改成“忘”,然後把 firstName 從“跑跑”改成“老魔”。

在你把 surName 改變之後,firstName 改變之前,對象的實際狀態是“忘跑跑”,而實際你的程序裏是不應該出現這個名字的,這就是一種不穩定的狀態。

在程序運行的過程中,你常常要把一個對象從一種穩定的狀態轉換到另一種穩定的狀態,在這個過程中,你不希望幹到一半的時候有另一個線程跑來讀你的對象,然後大叫:大家看啊這個對象它不穩定!

所以這時候你就需要“同步”。所謂同步,就是對多個線程可能共同訪問的“可更改狀態的”對象作保護,使同一時間只能有一個線程訪問,從而使任何一個線程去訪問它的時候,看到的總是穩定的狀態。(更通用一點,可以把這句話裏的“對象”改成“數據”)

上面說的這些,就是之所以需要同步的原因……………………的一半。

下面說另一半。

另一半說起來有點拗口,讀讀看:

如果沒有同步,那麼一個線程對某對象做出的更改可能另一個線程看不見。同步不僅確保各線程看到的數據總是穩定狀態,而且確保每一個進入某同步塊的線程都能看到之前所有進入這個同步塊的線程對數據所做的更改。

如果你對這句話不太理解,沒關係,看下一節。


發佈了27 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章