序列化如何在多线程环境中发挥作用?

时间:2014-04-11 14:23:35

标签: java

最近我通过序列化看到并听到了一个新概念(至少对我来说)。我看到的是我们有一个用于Hibernate的DAO类与DB通信,该类和所有实现Serialization。我已经要求开发人员说我们在传输对象时需要进行序列化。他告诉我在多线程环境中,我们需要实现接口或序列化。但我不相信他的判断。

我们是后端应用程序,我们正在为前端提供Web服务。所以我们正在面对前端课程,商务课程和DAO课程。在哪个区域使用此序列化。

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

3 个答案:

答案 0 :(得分: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没什么坏处,因为它只是标记界面。恕我直言在实体类中实现总是好的做法

答案 1 :(得分:0)

通过讲述多线程和序列化,我不知道他的意思。这是两个不同的概念。你有什么问题?

http://docs.oracle.com/javase/tutorial/jndi/objects/serial.html

序列化仅用于保存/恢复对象的状态以通过线路传输或从光盘保存/恢复等。例如,它用于RMI(远程过程调用)。

答案 2 :(得分:0)

每次需要获取对象时都会使用序列化,并将其转换为序列化形式,因此可以将其存储起来供以后使用(如保存文档),或者传输和使用一个不同的JVM。

序列化通常仅在分布式计算环境中使用时才会对并发性产生影响,在分布式计算环境中,不同的JVM实例可能会处理同一问题并需要交换信息。

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