Учитывая это следующий код:Что такое состояние блокировки после десериализации
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
? Заблокировано или разблокировано? null или нет? Зачем ?
Это можно легко узнать, выполнив это и проверив состояние блокировки, но я хочу понять это логически.
Я думаю, что после десериализации загрузка класса/объекта вызовет вызов конструктора ReentrantLock
(поскольку конструктор вызывается вне любого метода/конструктора), который даст вам разблокированный объект в результате. Я прав ?
да, я забыл сделать 'Data' сериализации. Виноват. Предположим, что он отмечен как Serializable. Как я могу сделать '_lock' не null после десериализации БЕЗ предоставления внешнего доступа к' _lock'? Я знаю, что могу просто удалить ключевое слово «переходный». Но действительно ли имеет смысл сериализовать блокировку? –