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>();