答えて
と仮定すると、ConcreteStrategy
は変更されていないか、スレッドセーフな方法でのみ変更されます。 final
修飾子は、(Java 1.5以降では)すべてのスレッドが少なくともクラスが初期化されたときの状態のINSTANCE
オブジェクトを確認するようにします。その後のオブジェクトへの変更は通常の方法(スレッドの安全性を提供する揮発性物質、同期、クラスなど)によってスレッドセーフにする必要があります。
私が間違っていれば私を修正してください。関数を呼び出すと、オブジェクト参照コピーがメソッドに渡されるため、メソッドが別のオブジェクトで実行されるたびにそのメソッドが渡されます。 クラスはWebアプリケーションで使用されますが、呼び出しはコードのみを共有しますか? – landal79
@ landal79:Javaは参照のコピーを渡します。だから "aClass" paramは参照のコピーです。しかし、使用され返されるAClassオブジェクトは同じです。それをポインタと考える。あなたはポインタ、ポインタのコピーなどを渡すことができますが、尖ったオブジェクトは同じです。もし1つの 'new'があれば、1つのオブジェクトがあります。 – helios
新しいJMMの「最終フィールドの意味」はここでは無関係です。すべてのスレッドは、静的な初期化子が本当にばかげた何かをしない限り、完全に初期化された 'ConcreteStrategy'クラスを見ます。 –
一般に、Javaでは、不変またはステートレスのオブジェクトはすべてスレッドセーフです。
例はです。スレッドセーフです。
への参照は、最終的なのでスレッドセーフです。しかし、ConcreteStrategyの内容はスレッドセーフではないかもしれません(コードは表示されないので、わかりません)。
をConcreteStrategyオブジェクトに適切に同期させると、スレッドセーフなオブジェクトになる可能性があります。
乾杯、ユージン。
- 1. スカラ:私は状態を管理して、私が持っているクラスのための戦略パターンを実装しようとしてるの戦略パターン
- 2. 戦略パターンの実装方法は?
- 3. 私は以下のようにファイルを持っているパターン
- 4. 安全なトライアル戦略
- 5. パターンは、私は以下のようにポリシーのクラスを持っている
- 6. name属性は、私は以下のようにグローバル例外戦略を作成したグローバル例外戦略
- 7. デフォルト戦略の戦略パターン
- 8. 種類エラーは、私は戦略パターンの実装をテストしようとしています
- 9. Pythonは、私は以下のようなJSONを持って
- 10. これは戦略パターンの実装ですか?
- 11. Perlでの戦略パターンのクリーンな実装
- 12. 配分戦略は、以下のように
- 13. Goで戦略パターンを実装する方法は?ここで
- 14. 戦略私は、次の戦略を実行に思っている
- 15. 私は以下のようなマトリックスクラスを持っています:
- 16. 私は以下のようなXMLを持って
- 17. 、私は以下のような配列を持っている
- 18. 私は以下のようなファイルを持っている
- 19. はJavaScript:SplitAtFirst( ':')私のような(静的)のルックアップを持って
- 20. スプリングで戦略パターンを効率的に実装する方法は?
- 21. パターンのすべての一致を検索し、以下のように私はパターンを持っているテキスト
- 22. 私は以下のようなJSONファイル持ってJSON
- 23. 私は以下のようなテキストファイル持っている値
- 24. 私は以下のようなコレクション持って配列
- 25. RelativeLayoutは、私は以下のようにrelativeLayoutを持って
- 26. XSDは - 私は、XSDファイルの以下のように持って
- 27. 戦略パターンのバリエーション
- 28. Symfony2の戦略パターン
- 29. 私は次のような実装を持っているカテゴリ
- 30. 私は以下のようなモデル持っている私のキューブではSSAS
ところで、誰もコンクリートストラテジーの別のインスタンスを作成していないことを知っているので、プライベートコンストラクタを追加してください。(希望の動作の場合には:) – helios
そしてあなたがそれについて話している間にクラスをfinalにしてください。 –