gpt4 book ai didi

java - 反序列化后锁的状态是什么

转载 作者:行者123 更新时间:2023-11-29 06:01:55 25 4
gpt4 key购买 nike

给出如下代码:

import java.io.Serializable;
import java.util.concurrent.locks.ReentrantLock;

class Data
{
private int value;

Data (int value)
{
this.value = value;
}
}

public class InfoCollection implements Serializable
{
private Data[] data;
private static final long serialVersionUID = 1L;
private transient ReentrantLock _lock = new ReentrantLock ();

public InfoCollection (int datasize)
{
this.data = new Data[datasize];
}

public setData (Data newdata, int index)
{
_lock.lock ();

try
{
this.data[index] = newdata;
}
finally
{
_lock.unlock ();
}
}
}

假设我创建了一个 InfoCollection 类型的对象并将其序列化。过了一会儿我反序列化它并想使用它。反序列化后,_lock 字段会处于什么状态?锁定还是解锁?为空还是不为空?为什么?

通过实际操作并检查锁的状态可以很容易地发现这一点,但我想从逻辑上弄清楚。

我在想,在反序列化之后,类/对象的加载会触发调用ReentrantLock的构造函数(因为构造函数是在任何方法/构造函数之外调用的),这结果会给你一个解锁的对象。我说得对吗?

最佳答案

JDK 1.5 中 ReentrantLock 的 Javadoc 明确指出:

 *
* <p>Serialization of this class behaves in the same way as built-in
* locks: a deserialized lock is in the unlocked state, regardless of
* its state when serialized.

关于java - 反序列化后锁的状态是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9803874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com