在研究ReentrantLock类的实现时,我想到了一个问题。ReentrantLock是可序列化的,在文档中它说任何反序列化的锁都是解锁的,而不管序列化时的状态如何。这是有意义的,因为状态锁定和解锁基本上是基于运行时的线程(谁持有锁),而当我们反序列化时,这些线程可能是不可用的。
问题是:为什么我们需要锁保持,因为它没有存储它的基本状态(锁定/解锁)?现在,我可以假设这可能是锁的公平性属性。但是公平性同样取决于底层操作系统,因此如果我们坚持一个平台上的锁,而在另一个平台上反序列化,因为(写一次并在任何地方运行)它可能无法工作,所以只为了公平而坚持下去是没有意义的。
希望我清楚地把我的混淆锁定序列化在java。
发布于 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页面上看到的所有其他内容。
https://stackoverflow.com/questions/17979009
复制相似问题