java - 我需要同步 writeObject() 吗?

标签 java serialization

我有一些通过 RMI 序列化同时访问的对象。最近我编写了自定义序列化方法:

/** This method is made to omit serialization of this.order */
private void writeObject(java.io.ObjectOutputStream out)
  throws java.io.IOException
{
    Order tmpOrder = this.order;
    this.order = null;
    out.defaultWriteObject();
    this.order = tmpOrder;
}

private void readObject(java.io.ObjectInputStream in)
  throws java.io.IOException, ClassNotFoundException
{
    in.defaultReadObject();
}

我不想允许并发 RMI 线程破坏 this.order。

  1. 我需要使 writeObject 同步吗?或
  2. RMI 框架是否尽力同步对对象的访问?

在第二种情况下,我的同步甚至可能导致 RMI 死锁。 JAVA API的一般约定是,除非特别说明,方法由一个线程调用。因此,如果我应该遵循规则,我应该让 writeObject 不进行任何同步。这是正确的吗?

在不回答问题的情况下解决我的问题的另一个解决方案当然是声明private static final ObjectStreamField[]serialPersistentFields。 (我无法使字段 transient ,因为该对象不仅是 DTO,而且还是 JPA 实体)

最佳答案

I have some objects which are accessed concurrently by RMI serialization

不,你不知道。您有一些对象可以通过对象序列化同时访问。

Does the RMI framework do all the best to synchronize the access to the object?

没有。对象序列化框架可能会,但未指定。

关于java - 我需要同步 writeObject() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10103456/

相关文章:

java - Android:扫描获取 WiFi 列表 - ListView 未出现

java - 内部查询中的 Hibernate 和 rownum

java - Google Guice 无法使用两个模块

java - 从文件中读取序列化对象

c# - 为什么我的 List<T> 没有被序列化?

c# - 如何序列化具有属性的字符串值列表

java - 如何使用 BITMASK 透明度创建 BufferedImage?

java - 具有相同 GroupId 的多个 Kafka 监听器都接收消息

java - 递增可序列化对象定义的版本 ID 的正当理由是什么?

jquery - 使用 JQuery .serialize() 组合具有相同名称的表单元素?