java - 在 java : automatic thread-safety? 中序列化

标签 java serialization concurrency cluster-computing

如果您在 Java 中序列化一个对象并将它(通过套接字)发送到集群中的节点,您会自动获得线程安全吗?

假设您有一个集群,每个节点都有多个核心。服务器有一个 Java 对象,它要发送到每个集群上的每个核心进行处理。它序列化该对象并将其发送给每个接收者。

通过序列化,该对象是否会自动进行某种程度的“深度复制”,您是否会自动获得该对象的线程安全性?您不会在集群上的各个节点之间遇到任何并发问题,因为它们无法访问内存中的同一位置……但是节点上的核心之间呢?

最佳答案

序列化操作不是线程安全的,对正在修改的对象进行序列化不是一个好主意。但是,同一线程、进程或宇宙中对象的任何深拷贝都是完整的副本,并且在您更改原始副本时不会更改。

注意:如果您再次发送更新后的对象,您可能看不到更新,因为它只是发送了对该对象的引用。因此,如果您想发送更新,您应该在发送者上调用 reset()。使用 reset() 的另一个原因是为了避免“内存泄漏”,否则发送方和接收方将记住他们曾经写入/读取的每个对象。

关于java - 在 java : automatic thread-safety? 中序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8724082/

相关文章:

java - 根据值对 Map 内的 HashMap 进行排序

java - 使用手动输入将整数、 double 或字符串存储在 Comparable ArrayList 中

ruby - 强制 Psych 读取 YAML 映射作为给定类的对象

concurrency - 什么是并发冲突?

java - eclipse Java;导出 jar,包括引用的库,没有 fatjar

java - 将自定义 JAXB 上下文与 Jersey 客户端结合使用

java Serialized接口(interface)没有功能,为什么会影响 "writeObject"/"readObject"

java - serialVersionUID = 1L 比生成串行版本 id 更好吗?

java - 线程转储分析(AWT-EventQueue 可运行但等待条件)

java - 将一个线程置于 sleep 状态,直到另一个线程中的条件得到解决