答えて
と仮定すると、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. Perlでの戦略パターンのクリーンな実装
- 7. 戦略私は、次の戦略を実行に思っている
- 8. 私は以下のようなテキストファイル持っている値
- 9. Goで戦略パターンを実装する方法は?ここで
- 10. RelativeLayoutは、私は以下のようにrelativeLayoutを持って
- 11. XSDは - 私は、XSDファイルの以下のように持って
- 12. スプリングで戦略パターンを効率的に実装する方法は?
- 13. は、私は以下のようなファイルの束を持っているのpython
- 14. は、私は以下のようなデータを持っているのPerl/AWK
- 15. Symfony2の戦略パターン
- 16. 戦略パターンのバリエーション
- 17. リファクタリングヘルプ - 戦略パターン
- 18. デザインパターン - 戦略パターン
- 19. は、私は以下のようなHTML何かを持っているjQueryオブジェクト
- 20. は...私はこのようなクエリを持っている...以下
- 21. ここに戦略パターンを実装しますか?
- 22. コントローラで戦略パターンを実装する方法
- 23. どのように私は以下のようにメソッドを持って
- 24. 以下のヘルパークラスは安全ですか?
- 25. SQL私は以下のようなテーブルを持っている状態
- 26. 解析と私は以下のような配列を持っている
- 27. は、私はサンプルコードは以下のように持っていた「古い」GCMの実装を実装しているアンドロイド6.0自動バックアップ
- 28. Flyweightパターンで静的インスタンスを静的インスタンスに割り当てる
- 29. は、どのように私は以下のクラスを持っているシーケンス
- 30. は、私は以下のようにHTMLコードを持っているjQueryの
ところで、誰もコンクリートストラテジーの別のインスタンスを作成していないことを知っているので、プライベートコンストラクタを追加してください。(希望の動作の場合には:) – helios
そしてあなたがそれについて話している間にクラスをfinalにしてください。 –