PicoContainer缓存可以是线程安全的吗?

时间:2012-02-29 06:01:51

标签: java singleton picocontainer

只是想弄清楚这里发生了什么,但我觉得我终于找到了什么。

我们有一些相当正常的PicoContainer代码,它只是打开缓存,我认为这应该导致单例行为:

container.as(Characteristics.CACHE).addComponent(Service.class, ServiceImpl.class);

然而,正如我们今天发现的那样,我们有一个组件显然不是一次构建,而是四次构建。这不是我可以在自己的计算机上重现的东西,只是在其他一些开发者机器上。

我们进一步调查,结果发现多个线程同时在PicoContainer中查找同一个组件,而不是实例化一个副本并使其他三个线程等待,它似乎只是实例化了四个副本(然后只记得保留其中一个。)

是否有一些相对简单的方法可以在PicoContainer中获得真正的奇异行为?

1 个答案:

答案 0 :(得分:2)

似乎pico-container需要针对您正在处理的案例的显式同步机制。 Here is a link记录了这种行为,并提出了相同的解决方案。

引用此链接

  

当组件由两个线程同时创建时,使用   缓存实例的意图,可能是一个小的   第一个实例进入缓存的案例百分比   替换为第二个实例。

另一个值得访问的链接是关于caching;