如果您在 Java 中序列化一个对象并将它(通过套接字)发送到集群中的节点,您会自动获得线程安全吗?
假设您有一个集群,每个节点都有多个核心。服务器有一个 Java 对象,它要发送到每个集群上的每个核心进行处理。它序列化该对象并将其发送给每个接收者。
通过序列化,该对象是否会自动进行某种程度的“深度复制”,您是否会自动获得该对象的线程安全性?您不会在集群上的各个节点之间遇到任何并发问题,因为它们无法访问内存中的同一位置……但是节点上的核心之间呢?
最佳答案
序列化操作不是线程安全的,对正在修改的对象进行序列化不是一个好主意。但是,同一线程、进程或宇宙中对象的任何深拷贝都是完整的副本,并且在您更改原始副本时不会更改。
注意:如果您再次发送更新后的对象,您可能看不到更新,因为它只是发送了对该对象的引用。因此,如果您想发送更新,您应该在发送者上调用 reset()
。使用 reset()
的另一个原因是为了避免“内存泄漏”,否则发送方和接收方将记住他们曾经写入/读取的每个对象。
关于java - 在 java : automatic thread-safety? 中序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8724082/