0

花了很多时间试图弄清楚这里发生了什么,但我想我终于找到了一些东西。

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

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

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

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

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

4

1 回答 1

2

对于您正在处理的情况,似乎 pico-container 需要显式同步机制。这是一个链接,它记录了这种行为并提出了相同的解决方案。

引用此链接

当两个线程同时创建组件时,为了缓存实例,在一小部分情况下,缓存中的第一个实例可能会被第二个实例替换。

另一个值得访问的链接是关于缓存

于 2012-02-29T06:18:14.810 回答