序列化:在多线程环境中维护缓存的好坏?

时间:2015-07-02 01:58:36

标签: java multithreading serialization

哪种方法更好:

  • 使用序列化创建缓存,或
  • 只需使用分隔符将字符串数组形式的对象写入文件?

最近我被告知序列化会创建一个不同的线程来处理,并且不应该在具有时序限制的多线程环境/应用程序中使用,您需要更快的处理和更少的中断!

在大型多线程java项目中,序列化效率是否正常?

2 个答案:

答案 0 :(得分:0)

序列化不会在不同的线程上占有一席之地。当java序列化对象时,如果另一个线程试图修改同一个对象,则可能会遇到一致性问题,因为在进行序列化时正在更改对象的状态。 您可以使用自己的实现遇到同样的问题。要回答“如果构建缓存的序列化是有效的”这个问题,我建议您查看缓存实现(一些好的开源,如hazlecast或ehcache)。

答案 1 :(得分:0)

长话短说,多线程Java项目中的低效序列化并不是真的。

说到标准的Java序列化,它发生在调用序列化的同一个线程中,它可以在覆盖线程环境中使用。在序列化可由多个线程写入的对象时,需要使用锁。像Cacheonix这样的缓存(我是一个提交者)在确保内部数据结构是线程安全的时候尽其所能。

同时,序列化未考虑缓存的任意Java对象可能非常耗时。设计缓存的一种简单方法是,如果可能的话,确保您的键和值只有像int和Strings这样的简单字段,并且理想情况下是不可变的。通过这种方式可以暗示缓存(在Cacheonix中实现Immutable接口),可以通过引用传递对象,从而允许缓存通过引用传递对象来避免所有序列化。

希望这会有所帮助。