0

ここで何が起こっているのかを理解しようとして多くの時間を失いましたが、私はついに何かに取り掛かっていると思います。

キャッシュをオンにするだけのかなり正常なPicoContainerコードがあります。これは、シングルトンの動作をもたらすと考えられていました。

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

しかし、今日私たちが見つけたように、明らかに1回ではなく、4回構築されているコンポーネントがあります。これは、自分のコンピューターで再現できるものではなく、他の開発者のマシンで再現できるものです。

さらに調査したところ、複数のスレッドがPicoContainerにアクセスして同じコンポーネントを同時に検索していたことが判明し、1つのコピーをインスタンス化して他の3つのスレッドを待機させる代わりに、4つのコピーをインスタンス化したように見えます(その後それらのうちの1つだけを保持することを覚えています。)

PicoContainerで真の特異な動作を取得するための比較的簡単な方法はありますか?

4

1 に答える 1

2

pico-containerには、処理しているケースに対して明示的な同期メカニズムが必要なようです。これは、この動作を文書化し、その解決策を提案するリンクです。

このリンクを引用するには

コンポーネントが2つのスレッドによって同時に作成され、インスタンスがキャッシュされることを意図している場合、キャッシュ内の最初のインスタンスが2番目のインスタンスに置き換えられる可能性がわずかにあります。

訪問する価値のある他のリンクは、キャッシングに関するものです。

于 2012-02-29T06:18:14.810 に答える