ここで何が起こっているのか把握しようとするだけの時間が失われましたが、私はついに何かに出ていると思います。PicoContainerキャッシュをスレッドセーフにすることはできますか?
私たちは、私はシングルトン動作を引き起こすことになっていたと思っただけで、キャッシングをオンにいくつかのかなりの正常PicoContainerコード、持っている:しかし
container.as(Characteristics.CACHE).addComponent(Service.class, ServiceImpl.class);
を我々が今日見られるように、我々は明らかに構築されているコンポーネントを持っています一度ではなく、四回。私自身のコンピュータ上で、他のいくつかの開発マシン上で再現できるものではありません。
さらに調査した結果、複数のスレッドがPicoContainerに同時に同じコンポーネントをルックアップさせ、1つのコピーをインスタンス化して他の3つのスレッドを待機させるのではなく、4つのインスタンス
PicoContainerで本当に特異な動作を得るには、比較的簡単な方法がありますか?
このための死後のちょっとした問題です。これは実際には、それを持っている人のための問題を修正し、少なくとも短期間には私たちが書いたすべてのテストを修正しました。長期的には、テストが実行される10,000回のうち1回、PicoContainerはコンポーネントの複数インスタンスを作成します。だから私はそれがスレッドセーフなものではないと主張していますが、Lockingビヘイビアを使用しても、それを使用していない場合よりも若干優れています。 – Trejkaz
真。私は[Double Check Lock](http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html)は、複数インスタンスの可能性をさらに減らすことができると思います。特に[メモリモデル]が改善されたJDK5(http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html)。 – Santosh
私は、PicoContainerがどのように動作するのかを掘り下げ、本当にスレッドセーフなコンポーネントアダプタを作るためにGuavaの並行処理のいくつかを試してみると思っていました。 – Trejkaz