只是想弄清楚这里发生了什么,但我觉得我终于找到了什么。
我们有一些相当正常的PicoContainer代码,它只是打开缓存,我认为这应该导致单例行为:
container.as(Characteristics.CACHE).addComponent(Service.class, ServiceImpl.class);
然而,正如我们今天发现的那样,我们有一个组件显然不是一次构建,而是四次构建。这不是我可以在自己的计算机上重现的东西,只是在其他一些开发者机器上。
我们进一步调查,结果发现多个线程同时在PicoContainer中查找同一个组件,而不是实例化一个副本并使其他三个线程等待,它似乎只是实例化了四个副本(然后只记得保留其中一个。)
是否有一些相对简单的方法可以在PicoContainer中获得真正的奇异行为?
答案 0 :(得分:2)
似乎pico-container需要针对您正在处理的案例的显式同步机制。 Here is a link记录了这种行为,并提出了相同的解决方案。
引用此链接
当组件由两个线程同时创建时,使用 缓存实例的意图,可能是一个小的 第一个实例进入缓存的案例百分比 替换为第二个实例。
另一个值得访问的链接是关于caching;