我浪费了很多时间来弄清楚这里发生了什么,但我想我终于找到了一些东西。
我们有一些相当正常的PicoContainer代码,它们只是简单地打开缓存,我认为这应该导致单例行为:
container.as(Characteristics.CACHE).addComponent(Service.class, ServiceImpl.class);然而,正如我们今天所发现的,我们有一个组件,显然不是一次,而是四次。这不是我可以在我自己的计算机上复制的东西,只能在其他开发人员的机器上复制。
我们进一步研究,发现多个线程同时访问PicoContainer来查找相同的组件,而不是实例化一个副本并让其他三个线程等待,它似乎只实例化了四个副本(然后只记得保留其中的一个副本)。
有没有什么相对简单的方法可以在PicoContainer中获得真正的奇异行为?
发布于 2012-02-29 14:18:15
对于您正在处理的情况,微微容器似乎需要显式的同步机制。Here is a link,它记录了这种行为,并提出了相应的解决方案。
引用此链接
当组件由两个线程并发创建时,出于对实例进行缓存的目的,在很小比例的情况下,缓存中的第一个实例可能会被第二个实例替换。
另一个值得访问的链接是关于caching的;
https://stackoverflow.com/questions/9494265
复制相似问题