哪种方法更好:
最近我被告知序列化会创建一个不同的线程来处理,并且不应该在具有时序限制的多线程环境/应用程序中使用,您需要更快的处理和更少的中断!
在大型多线程java项目中,序列化效率是否正常?
答案 0 :(得分:0)
序列化不会在不同的线程上占有一席之地。当java序列化对象时,如果另一个线程试图修改同一个对象,则可能会遇到一致性问题,因为在进行序列化时正在更改对象的状态。 您可以使用自己的实现遇到同样的问题。要回答“如果构建缓存的序列化是有效的”这个问题,我建议您查看缓存实现(一些好的开源,如hazlecast或ehcache)。
答案 1 :(得分:0)
长话短说,多线程Java项目中的低效序列化并不是真的。
说到标准的Java序列化,它发生在调用序列化的同一个线程中,它可以在覆盖线程环境中使用。在序列化可由多个线程写入的对象时,需要使用锁。像Cacheonix这样的缓存(我是一个提交者)在确保内部数据结构是线程安全的时候尽其所能。
同时,序列化未考虑缓存的任意Java对象可能非常耗时。设计缓存的一种简单方法是,如果可能的话,确保您的键和值只有像int和Strings这样的简单字段,并且理想情况下是不可变的。通过这种方式可以暗示缓存(在Cacheonix中实现Immutable接口),可以通过引用传递对象,从而允许缓存通过引用传递对象来避免所有序列化。
希望这会有所帮助。