老関学の単態モードと

1395 ワード

老関学の単態モードと
老関者、私の同級生も.ははは、今日彼のブログを見て、単態モードについてさらに理解しました.
以前使用していた単態モードも、実現できますが、制限がありますので、次のコードを見てください.
import java.util.*;
class Singleton
{
private static Singleton instance;

private Singleton()
{
}

public static Singleton getInstance()
{
if (instance == null) //1
instance = new Singleton(); //2
return instance; //3
}
}
これが私たちがよく使う単一状態モードです.
次に、2つのスレッドが同時にこのプログラムを実行した場合、1、2まで実行したばかりで、まだ行がなく、停止していると仮定します.
このとき
thread 1で得られたinstanceはnull
thread 2で得られたinstanceもnull
次はどうなるの?
2つのスレッドは、new Singleton()オブジェクトをそれぞれ作成および初期化することは明らかです.
では、私たちの単態は単態の機能を実現することができますか?できません.
ただし、これは特例であり、マルチスレッドプログラムが同時に2つ以上のスレッドが1まで実行され、2が実行されていない場合にのみ発生します.
すなわち,メソッドの同期が実現されなければ,上記のモードではインスタンスの生成は保証されない.
非マルチスレッドのプログラムであれば、このような問題は発生しません.
しかし、いくつかのプログラムは厳密な仕事です.したがって、プログラムはいかなる場合でもプラットフォームで正しくなければならない.
この文書を通じて、なぜ上の単一状態モードが安全ではないのか、なぜこのような実現方法が複数のインスタンスを生成する可能性があるのか、理解してほしい.
もっと深く理解したいので参考にしてください
http://guanhw.blog.hexun.com/10653016_d.html
|----------------------------------------------------------------------------------------|
著作権声明著作権所有@zhyiwww
引用ソースを明記してくださいhttp://www.blogjava.net/zhyiwww   
|----------------------------------------------------------------------------------------|