【发布时间】:2009-06-02 11:01:53
【问题描述】:
ehcache 默认支持多线程还是需要任何配置更改? 在使用 Ehcache 对我的应用程序进行多线程处理时,我发现数据库命中计数实际上正在增加,即,尽管我的缓存都是单例,但没有可用于所有线程的全局缓存。有什么建议吗?
【问题讨论】:
标签: java multithreading ehcache
ehcache 默认支持多线程还是需要任何配置更改? 在使用 Ehcache 对我的应用程序进行多线程处理时,我发现数据库命中计数实际上正在增加,即,尽管我的缓存都是单例,但没有可用于所有线程的全局缓存。有什么建议吗?
【问题讨论】:
标签: java multithreading ehcache
这可能有助于回答您的问题,来自the FAQ:
从缓存中检索后修改元素值是否线程安全?
请记住,缓存元素中的值可以从多个线程全局访问。 修改值本质上不是线程安全的。检索一个值、删除缓存元素然后重新插入该值更安全。
(重点由我添加)
【讨论】:
从official documentation 看来,它是专门构建和测试的,可以在高并发访问下运行良好,只要您不从多个线程修改Element。
但是,当然,这并不意味着使用 Ehcache 可以使代码的其他部分成为线程安全的。如果您从多个线程中获取相同的值(使用相同的键),则该实例可能是共享的,您需要在修改它之前知道自己在做什么。 Best 似乎使用不可变对象(如字符串)作为缓存值。
【讨论】: