花了很多时间试图弄清楚这里发生了什么,但我想我终于找到了一些东西。
我们有一些相当正常的 PicoContainer 代码,它们只是打开缓存,我认为这应该会导致单例行为:
container.as(Characteristics.CACHE).addComponent(Service.class, ServiceImpl.class);
然而,正如我们今天发现的那样,我们有一个组件显然不是一次构建,而是四次。这不是我可以在我自己的计算机上复制的东西,只能在其他一些开发人员机器上复制。
我们进一步调查,结果发现多个线程同时访问 PicoContainer 以查找相同的组件,而不是实例化一个副本并让其他三个线程等待,它似乎只是实例化了四个副本(然后只记得保留其中一个。)
是否有一些相对简单的方法可以在 PicoContainer 中获得真正的奇异行为?