我有一個對象,其內部可變狀態不斷由一個或多個線程更新。對象是同步的,而我們的目標是定期從另一個線程保存(通過序列化)它的狀態:Java。多線程環境中的對象序列化
public class Counter implements Serializable {
private int dogCount;
private int catCount;
public synchronized void updateFromDogThread(int count) {
dogCount = count;
}
public synchronized void updateFromCatThread(int count) {
catCount = count;
}
}
問題:
- 系列化是在這種情況下,安全嗎?
- 它如何在引擎蓋下工作?也就是說,
ObjectOutputStream
將執行序列化塊,直到Counter
沒有線程再運行爲止? - 如果
Counter
的同步沒有使用固有鎖定,但是其他鎖定會怎麼樣?