Serializable ThreadLocal 是如何实现的?
How Is Serializable ThreadLocal?
我正在尝试序列化神经网络,但我面临着不知道如何去做的事实。我的代码。
public class Layer implements Serializable {
private final int size;
private ThreadLocal<Vec> out = new ThreadLocal<>();
private Activation activation;
private Optimizer optimizer;
private Matrix weights;
private Vec bias;
private double l2 = 0;
private Layer precedingLayer;
但是在序列化时,我得到以下异常 - 线程“main”中的异常 java.io.NotSerializableException:java.lang.ThreadLocal
如何序列化我的 class?
因为你的 Layer class 中的字段没有实现 Serializable,java 不知道如何序列化 Layer 的实例。
具体来说,如异常消息所示,ThreadLocal<Vec> out
就是这样一个无法序列化的字段,如果查看 class,您会发现它没有实现 Serializable 接口。
本地线程:https://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html
可序列化:https://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html
你可能会像这样制作一个 class 来编译:
import java.io.Serializable;
public class SerializableThreadLocal<T> extends ThreadLocal<T> implements Serializable {
}
然后在开始时实例化 SerializableThreadLocal
的实例,如下所示:
private ThreadLocal<Vec> out = new SerializableThreadLocal<Vec>();
我正在尝试序列化神经网络,但我面临着不知道如何去做的事实。我的代码。
public class Layer implements Serializable {
private final int size;
private ThreadLocal<Vec> out = new ThreadLocal<>();
private Activation activation;
private Optimizer optimizer;
private Matrix weights;
private Vec bias;
private double l2 = 0;
private Layer precedingLayer;
但是在序列化时,我得到以下异常 - 线程“main”中的异常 java.io.NotSerializableException:java.lang.ThreadLocal 如何序列化我的 class?
因为你的 Layer class 中的字段没有实现 Serializable,java 不知道如何序列化 Layer 的实例。
具体来说,如异常消息所示,ThreadLocal<Vec> out
就是这样一个无法序列化的字段,如果查看 class,您会发现它没有实现 Serializable 接口。
本地线程:https://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html
可序列化:https://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html
你可能会像这样制作一个 class 来编译:
import java.io.Serializable;
public class SerializableThreadLocal<T> extends ThreadLocal<T> implements Serializable {
}
然后在开始时实例化 SerializableThreadLocal
的实例,如下所示:
private ThreadLocal<Vec> out = new SerializableThreadLocal<Vec>();