1

ヘルパー静的メソッドaAを持つクラスAがあります。このメソッドのローカル変数は静的です。オブジェクト B もインスタンス化します。クラス A のオブジェクトをいくつか作成し、必要に応じてこの静的メソッドを呼び出すとします。

現実の世界では、XML ドキュメントを非同期でダウンロードして解析しています。parse メソッドは静的で、内部で何が起こっているのだろうか? そのようなヘルパー メソッドはスレッド セーフですか? 静的メソッド変数で何が起こっていますか?

インスタンス化されたクラスの静的メソッドがマルチスレッド環境でどのように動作するかを説明していただけますか?

4

3 に答える 3

3

答えは、この性質の他のスレッドに関する質問と同じです。メソッドが変更可能な共有状態にアクセスする場合は、その状態へのアクセスを同期します。これは、インスタンス メソッドと同様に、静的メソッドにも同様に適用されます。

静的メソッドがその引数とローカル変数 (メソッドの本体内で宣言された変数) のみを使用する場合、それはおそらくスレッドセーフです。静的クラスレベルの変数またはデータ構造に書き込む場合、または別のスレッドによって変更できる場合はその構造から読み取る場合は、そのデータへのアクセスを同期する必要があります。

問題のメソッドの定義を見ないと、そのメソッドがスレッドセーフであるかどうかを明確に述べることができません。

于 2013-08-29T18:31:21.903 に答える
1

メソッドが静的であるかどうかは、それがスレッドセーフであるかどうかとは何の関係もありません。インスタンス メソッドは、 と呼ばれる隠しパラメータを受け取る単なる静的メソッドですthis。他に違いはありません。

スレッドセーフは、単一のメソッドではなく、システム全体のプロパティです。他のスレッドで同時に読み書きされている変数に書き込んでいないことを確認してください。任意のスレッド スケジューリングに直面しても、システム全体が仕様どおりに動作することを確認してください。

コードを見ずにこれ以上言うのは難しいです。

于 2013-08-29T19:12:13.910 に答える