ReentrantLock 클래스의 구현을 들여다 보면서 한 가지 질문이 떠 올랐습니다. ReentrantLock은 직렬화 가능하며 문서에서 직렬화 된 모든 잠금은 직렬화 된 상태와 관계없이 항상 잠금 해제됩니다. 상태 잠금과 잠금 해제는 기본적으로 런타임에 스레드 (잠금을 보유한 사용자)를 기반으로하며 해당 스레드를 직렬화 해제하는 동안 사용할 수 없기 때문에 의미가 있습니다.Java에서 잠금을 직렬화 할 수있는 이유는 무엇입니까?
질문 : 잠금이 기본 상태 (잠금/잠금 해제)로 저장되지 않아서 잠금을 유지해야하는 이유는 무엇입니까? 지금 당장은 자물쇠의 공정성을위한 것이라고 생각할 수 있습니다. 그러나 공평성은 기본 운영 체제에 따라 다르기 때문에 한 플랫폼에서 잠금을 유지하고 다른 플랫폼에서 다시 직렬화하면 (일회 작성하고 어디에서 실행해도) 작동하지 않을 수 있으므로 공정성만을 유지할 필요가 없습니다.
희망 Java에서 Lock serialization에 대한 혼란을 분명히 나타 냈습니다.
그런 경우 잠금이 일시적으로 선언 될 수 있으며 어쨌든 비표준화 이후에는 중요한 섹션을 다시 잠 가야합니다. – Gourabp
@Gourabp 그것은 좋은 지적입니다. 내 말은, 너 아직도 그럴 수있어, 안 그래? 저는 그들이 직렬화로 "안전"하기 위해이 방법으로 만들었다 고 생각합니다. 하지만 그 이외에, 나는 그들이 정말로 왜 그렇게 확신 할 수없는 것 같아요. –