我有一些通过 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
。 (我无法使字段 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/