作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
花了很多时间试图弄清楚这里发生了什么,但我想我终于明白了一些事情。
我们有一些相当正常的 PicoContainer 代码,它只是打开缓存,我认为这应该会导致单例行为:
container.as(Characteristics.CACHE).addComponent(Service.class, ServiceImpl.class);
然而,正如我们今天发现的那样,我们有一个组件显然不是被构建了一次,而是被构建了四次。这不是我可以在自己的计算机上重现的东西,只能在其他一些开发人员的计算机上重现。
我们进一步调查,结果发现多个线程同时访问 PicoContainer 来查找同一个组件,并且它没有实例化一个副本并让其他三个线程等待,而是只实例化了四个副本(然后只记得保留其中一个。)
是否有一些相对简单的方法可以在 PicoContainer 中获得真正的奇异行为?
最佳答案
对于您正在处理的情况,似乎 pico-container 需要显式同步机制。 Here is a link它记录了这种行为并提出了相同的解决方案。
引用此链接
When components are created by two threads concurrently, with the intention of the instance being cached, it is possible in a small percentage of cases for the first instance into the cache to be replaced with a second instance.
另一个值得访问的链接是关于 caching ;
关于java - PicoContainer 缓存可以是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9494265/
我是一名优秀的程序员,十分优秀!