安全性 a、 編寫線程安全的代碼,其核心在於要對狀態的訪問、更改等操作進行管理,特別是對共用的、可變的狀態的訪問。java中主要的同步機制有synchronized(獨占鎖)、volatile類型的變數、顯式鎖、原子變數。 b、修複同步問題的方式: 1、不線上程之間共用該狀態變數 2、將狀態變數修改 ...
安全性
a、 編寫線程安全的代碼,其核心在於要對狀態的訪問、更改等操作進行管理,特別是對共用的、可變的狀態的訪問。java中主要的同步機制有synchronized(獨占鎖)、volatile類型的變數、顯式鎖、原子變數。
b、修複同步問題的方式:
1、不線上程之間共用該狀態變數
2、將狀態變數修改為不可變的變數
3、在訪問、修改狀態變數時使用同步
c、當多個線程訪問某個類時,這個類始終能表現出正確的行為,稱這個類是線程安全的。
d、無狀態的對象一定是線程安全的。
原子性:
1、竟態條件:當某個計算的正確性取決於多個線程的交替執行時序時,此時就會發生竟態條件。(先檢查後執行,讀取、修改、寫入的操作)
2、複合操作:先檢查後執行,讀取、修改、寫入的操作
3、當在無狀態的類中添加一個狀態時,如果該狀態是由線程安全的對象來管理,那麼這個類仍然是線程安全的。
內置鎖:
1、每一個對象都有一把內置鎖,並且是互斥的。
2、重入性: 線程獲取鎖時,JVM將記錄下鎖的持有者,且將獲取計數值置為1,如同一線程在次獲取鎖(同一個類中a同步方法調b同步方法,掉父類的同步方法),計數值將遞增,當線程退出同步代碼塊時,計數器會減一,當為0時,這個鎖將被釋放。