最近我看到并听到了一个新的概念(至少在我这里)序列化。我看到的是,我们有一个Hibernate的DAO类来与DB交流,该类和所有实现序列化。我曾经要求开发人员说我们需要在传输对象时进行序列化。他在多线程环境中告诉我,我们需要实现接口或序列化。但我不相信他的陈述。序列化如何在多线程环境中有所帮助?
我们是后端应用程序,我们正在向前端提供web服务。所以我们有前端面对类,商业类和DAO类。在什么地方使用这个序列化。
开发人员在多线程和序列化方面是否正确?
最近我看到并听到了一个新的概念(至少在我这里)序列化。我看到的是,我们有一个Hibernate的DAO类来与DB交流,该类和所有实现序列化。我曾经要求开发人员说我们需要在传输对象时进行序列化。他在多线程环境中告诉我,我们需要实现接口或序列化。但我不相信他的陈述。序列化如何在多线程环境中有所帮助?
我们是后端应用程序,我们正在向前端提供web服务。所以我们有前端面对类,商业类和DAO类。在什么地方使用这个序列化。
开发人员在多线程和序列化方面是否正确?
我不知道他讲多线程和序列化的意思。这是两个不同的概念。你的问题是什么 ?
http://docs.oracle.com/javase/tutorial/jndi/objects/serial.html
序列化被简单地用于保存/恢复对象的状态到它通过线路传送或保存/从盘等,这是在使用RMI(远程过程调用)例如恢复。
您必须实施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
,因为它只是标记接口。恕我直言,它始终是在实体类来实现好的做法
序列化使用你需要一个对象,并将其转换为一个序列形式的任何时间,因此它可以存储供以后使用(如保存文档),或在不同的JVM上传输和使用。
串行化通常只在分布式计算环境中使用时才会影响并发性,在分布式计算环境中,不同的JVM实例可能在解决同一问题并需要交换信息。
这些都不是你需要担心很长很长时间的事情。