serialization - 为什么锁在Java中是可序列化的?

标签 serialization deserialization

在研究ReentrantLock类的实现时,我想到了一个问题。
ReentrantLock是可序列化的,并且在文档中说,任何反序列化锁始终被解锁,而与序列化时的状态无关。这是有道理的,因为状态Lock和unlock基本上是基于运行时(持有锁的线程)的线程,并且在我们反序列化这些线程时可能不可用。

问题是:为什么我们需要Lock来保留它,因为它不存储其基本状态(锁定/解锁)?现在,我可以假定这可能是因为锁的公平性。但是公平性再次取决于底层操作系统,因此,如果我们将锁定保持在一个平台上而反序列化在另一个平台上,则是因为(一次编写并在任何地方运行)它可能无法正常工作,因此仅出于公平性考虑就没有意义。

希望我清楚地对Java中的锁序列化感到困惑。

最佳答案

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/Condition.html
http://download.java.net/jdk7/archive/b123/docs/api/java/util/concurrent/locks/ReentrantLock.html

我要说的是Lock持久存在的原因是,您可以序列化依赖Lock本身的对象。如果Lock无法序列化,则依赖于Lock的任何内容也将无法序列化。

您还可以存储所有者,holdCount,queuedThreads以及您在上面为ReentrantLock链接的API页面上看到的所有其他内容。

关于serialization - 为什么锁在Java中是可序列化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17979009/

相关文章:

json - 是否可以使用 JsonReaderWriterFactory 将 XML 转换为 JSON,而不使用 DataContractJsonSerializer?

c++ - boost 套接字的序列化

java - 如何触发对 Jackson 中实现 JsonSerializable 的类的 .serializeWithType() 的调用?

ruby-on-rails - 向 ActiveRecord 序列化添加更多属性?

java - 可靠地识别序列化 Java 对象的类

c# - dotnet core 在RedIs中存储对象

java - 反序列化 Yaml 对象列表

PHP 社交网络好友数据库表包含序列化数据

java - 有没有办法通过 Rest 服务发送 Map<String, CustomObject>?

java - 反序列化后如何获取Transient Variable原始值