java併發編程實戰(1)-線程安全、競態條件、複合操做

1、線程安全java

線程安全性:當多個線程訪問某個類時,這個類可以表現出正確的結果,那麼這個類就是線程安全的。編程

競態條件:在併發編程中,因爲不恰當的執行時序而致使出現不正常的結果的狀況就是競態條件。安全

        例如:併發

             兩個線程調用一個類的int值自增後返回結果方法。可能致使返回結果同樣。線程

複合操做:包含了一組必須以原子方式執行的操做,用以確保線程安全性。對象

    「先檢查後執行」 :兩個線程同時調用一個類的初始化實例方法,而後在執行操做。內存

    「讀取-修改-寫入」:遞增運算。作用域

java的內置鎖:synchronized   同步

java內置鎖是一個互斥鎖,這就是意味着最多隻有一個線程可以得到該鎖,當線程A嘗試去得到線程B持有的內置鎖時,線程A必須等待或者阻塞,知道線程B釋放這個鎖,若是B線程不釋放這個鎖,那麼A線程將永遠等待下去。方法

前面介紹瞭如何經過同步來避免多個線程同一時刻訪問相同的數據,如今介紹如何共享和發佈對象,使得他們可以安全的在多個線程中同時訪問。

2、對象的共享

可見性:

    加鎖的意義不單單侷限於互斥行爲,還包括內存的可見性。

發佈:發佈一個對象的意思就是使對象可以在當前做用域以外的代碼中使用。

逸出:當某個不該該發佈的對象被髮布時,成爲逸出。

相關文章
相關標籤/搜索