2014-04-11 38 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實例可能在解決同一問題並需要交換信息。

這些都不是你需要擔心很長很長時間的事情。