首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么锁在java中是可序列化的?

为什么锁在java中是可序列化的?
EN

Stack Overflow用户
提问于 2013-07-31 19:15:57
回答 1查看 1.5K关注 0票数 10

在研究ReentrantLock类的实现时,我想到了一个问题。ReentrantLock是可序列化的,在文档中它说任何反序列化的锁都是解锁的,而不管序列化时的状态如何。这是有意义的,因为状态锁定和解锁基本上是基于运行时的线程(谁持有锁),而当我们反序列化时,这些线程可能是不可用的。

问题是:为什么我们需要锁保持,因为它没有存储它的基本状态(锁定/解锁)?现在,我可以假设这可能是锁的公平性属性。但是公平性同样取决于底层操作系统,因此如果我们坚持一个平台上的锁,而在另一个平台上反序列化,因为(写一次并在任何地方运行)它可能无法工作,所以只为了公平而坚持下去是没有意义的。

希望我清楚地把我的混淆锁定序列化在java。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-31 19:20:00

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不是可序列化的,那么依赖它的任何东西也不能被序列化。

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17979009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档