在研究ReentrantLock類的實現時,在我的腦海中出現了一個問題。 ReentrantLock是可序列化的,並且在文檔中說任何反序列化的鎖總是被解鎖,而不管序列化時的狀態如何。這是有道理的,因爲狀態鎖定和解鎖基本上是基於運行時線程(誰持有鎖),而我們反序列化這些線程可能不可用。爲什麼鎖在java中是可序列化的?
問題是:爲什麼我們需要鎖定,因爲它不存儲它的基本狀態(鎖定/解鎖)?現在我可以假設這可能是鎖的公平屬性。但公平性仍然取決於底層操作系統,所以如果我們堅持在一個平臺上鎖定並且在另一個平臺上反序列化,因爲(寫入一次並在任何地方運行),它可能無法工作,因此沒有意義堅持公平。
希望我明確地把我的關於鎖序列化在java中的困惑。
如果情況是這樣的話Lock可以被聲明爲瞬態的,並且無論如何您都必須再次鎖定關鍵部分。 – Gourabp
@Gourabp這是一個很好的觀點。我的意思是,你仍然可以那樣做,不是嗎?我認爲他們這樣做只是爲了在序列化時「安全」。但除此之外,我想我真的不太確定他們爲什麼會。 –