クラスに がある場合、変数にアクセスするプロセスが別のプロセスを実行している間に、別のプロセスがその変数の値を変更できるためStatic Variable
、一部の開発者は 経由でそれらにアクセスすることを提案します。Synchronize Methods
これは間違っていますか?とも関係ありThread Safe
ますか?
3 に答える
はい、これはプロセスではなくスレッド セーフに関連しています (通常、各プロセスには独自のメモリがあるため、変数への共有アクセスはありません)。
変数が複数のスレッドからアクセスされる可能性がある場合は常に、何らかの形式の同期を追加して、1 つのスレッドで行われた変更が他のスレッドに表示され、変数 (およびおそらく関連する変数) に対する操作が表示されないようにする必要があります。互いに干渉します。
静的変数へのアクセスを同期することは、一般的には良い考えです。これは、変数がパブリックでもある場合は特に、複数のスレッドからアクセスされる可能性を除外するのが難しいことが多いためです。
この変数が定数の場合、つまり、静的な初期化中にのみ設定され、その後変更されない場合は、アクセスを同期する代わりに最終的なものにすることができます。同様に、変数の用途によっては、変数を揮発性にするだけで十分な場合もあります。これにより、少なくともその値への変更がすべてのスレッドにすぐに表示されるようになります。
変数が であるstatic
からといって、同時変更から保護する必要があるわけではありません。
変数を含むクラスが並行環境で使用されることが予想され、静的変数が最終的 (または不変オブジェクト) でない場合は、アクセスを同期して制御する方が適切です。同期されたメソッドまたはブロックはパフォーマンスが低いため、そうしないでください。