Может ли кэширование PicoContainer быть поточно-ориентированным? - PullRequest
0 голосов
/ 29 февраля 2012

Потерял кучу времени, просто пытаясь выяснить, что здесь происходит, но я думаю, что наконец-то понял что-то.

У нас есть довольно обычный код PicoContainer, который просто включает кеширование, которое ямысль должна была привести к одноэлементному поведению:

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

Однако, как мы обнаружили сегодня, у нас есть компонент, который, очевидно, создается не один, а четыре раза.Это не то, что я могу воспроизвести на своем собственном компьютере, просто на некоторых других машинах разработчика.

Мы провели дальнейшие исследования, и оказалось, что несколько потоков обращались к PicoContainer, чтобы одновременно искать один и тот же компонент, ивместо того, чтобы создавать экземпляр одной копии и заставлять другие три потока ждать, создается впечатление, что он просто создает четыре копии (а затем только запоминает, чтобы хранить одну из них).

Существует ли относительно простой способ получить истинное единственное числоповедение в PicoContainer?

1 Ответ

2 голосов
/ 29 февраля 2012

Кажется, пико-контейнер нуждается в явном механизме синхронизации для случая, с которым вы имеете дело. Вот ссылка , которая документирует это поведение и предлагает решения для того же самого.

Цитировать эту ссылку

Когда компоненты создаются двумя потоками одновременно, с намерение кэшируемого экземпляра возможно в небольшом процент случаев для первого экземпляра в кеш заменен вторым экземпляром.

Другая ссылка, которую стоит посетить, касается кэширования ;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...