私は疑問を持っています。
マルチスレッド環境で、1万人のユーザーが同時にサイトを使用していて、サイトに静的メソッドがあるとします。
JAVAの静的メソッドが単一のインスタンスを作成する場合、10k番目のユーザーは、残りのユーザーが使用を完了するまでメソッドを待つ必要があります。
私は正しいですか?
誰か説明してもらえますか?
3 に答える
JAVAの静的メソッドが単一のインスタンスを作成する場合、残りのユーザーがそこで使用を完了するまで、10K番目のユーザーはメソッドを待つ必要があります。
静的メソッドを呼び出しても、インスタンスは暗黙的に作成されません。もちろん、メソッド内でこれを行うことができますが、そうする必要はありません。
また、インスタンスの作成にロックは必要ありません。ただし、必要に応じて同期を追加できます。
したがって、共有データへの同期アクセスを必要としない単純な静的メソッドの場合、複数のスレッドがそのメソッドを同時に呼び出すことに問題はありません。
シングルトンやファクトリーのようなものを意味していると思います。
public class X {
public static X getInstance() {
return new X();
}
private X() {}
}
次に、それはすべて、静的メソッドで何をするかに依存します。メソッドがスレッド化を気にしない場合(上記の例のように)、同期してはならず、同時に実行できます。X.getInstance()
同時に実行しても問題がなく、10Kthが待機する必要がないため、間違っています。終了する前に。
メソッドをマルチスレッド化できない場合は、同期する必要があります(メソッド全体またはメソッドの一部)。そうすれば、その通りです。
NO..10K番目のユーザーは、残りのユーザーが使用を完了するまでメソッドを待つ必要はありません。
静的ではないため、メソッドは同期されません...したがって、複数のスレッドが同じオブジェクトにアクセスできます。