2014-04-11 39 views
2

最近我看到并听到了一个新的概念(至少在我这里)序列化。我看到的是,我们有一个Hibernate的DAO类来与DB交流,该类和所有实现序列化。我曾经要求开发人员说我们需要在传输对象时进行序列化。他在多线程环境中告诉我,我们需要实现接口或序列化。但我不相信他的陈述。序列化如何在多线程环境中有所帮助?

我们是后端应用程序,我们正在向前端提供web服务。所以我们有前端面对类,商业类和DAO类。在什么地方使用这个序列化。

开发人员在多线程和序列化方面是否正确?

回答

1

您必须实施Serializable为了将您的对象转换为bitStream,无论你做什么。

只有一件事,你必须在多线程环境中考虑,ObjectStream在写入对象时没有锁定。所以如果你的对象状态会被多个线程同时修改。锁定和写入安全是应用责任。

这个SO提供了更多关于这方面的信息。

"He told me in a multithreaded environment, either we need to implement interface or serialization" 

你的意思是实施interface?任何界面?或proxies

对于DAO层。按照JPA规范

If an entity instance is to be passed by value as a detached object (e.g., through a remote interface), the 
entity class must implement the Serializable interface 

所以JPA不,除非你想序列外力你做Serializable(如在远程发送对象/写入文件等)。但它是没有什么害处实施Serializable,因为它只是标记接口。恕我直言,它始终是在实体类来实现好的做法

0

序列化使用你需要一个对象,并将其转换为一个序列形式的任何时间,因此它可以存储供以后使用(如保存文档),或在不同的JVM上传输和使用。

串行化通常只在分布式计算环境中使用时才会影响并发性,在分布式计算环境中,不同的JVM实例可能在解决同一问题并需要交换信息。

这些都不是你需要担心很长很长时间的事情。