是否可以依赖单例实例作为共享资源?

时间:2014-05-13 17:20:43

标签: java spring

在一个程序中,我打算使用在Spring IoC中生成的singleton hashmap作为不同线程之间的共享资源,但是我需要确保这个实例永远不会被重新生成,否则,我输了我的缓存数据。我能依靠吗?

default-lazy-init="true"

<util:map id="sharedResource" map-class="java.util.HashMap" key-type="KeyClass" value-type="ValueClass"/>

2 个答案:

答案 0 :(得分:1)

默认情况下,Spring bean是单例,所以你很好。但是,两个或多个线程使用的Hashmap不保证线程安全。您可以使用ConcurrentHashMap作为map-class来解决这个问题。

话虽如此,我认为这是一个基本的缓存策略。如果它符合您的目的,那就太棒了。如果您需要更复杂的缓存策略,建议查看Ehcache或Memchached。

答案 1 :(得分:0)

这会为每个春季应用程序上下文生成一个单例实例 。您还需要确保所有模块共享相同的弹簧上下文。如果另一个模块加载了自己的上下文,您将获得文件中所有实例的全新副本,包括单例实例。

确保您有一个集中的位置来生成和管理弹簧环境的生命周期。