我有一些由 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。
- 我需要使 writeObject 同步吗?或者
- RMI 框架是否尽最大努力同步对对象的访问?
在第二种情况下,我的同步甚至可能导致 RMI 中的死锁。JAVA API 的一般约定是一个方法由一个线程调用,除非特别注明。因此,如果我应该遵守规则,我应该离开writeObject
没有任何同步。这个对吗 ?
在不回答问题的情况下解决我的问题的另一种方法当然是声明private static final ObjectStreamField[] serialPersistentFields
. (我不能使字段瞬态,因为该对象不仅是 DTO,而且也是 JPA 实体)