シングルトンパターンは、システムにクラスのインスタンスが1つしかないことを保証するオブジェクト作成パターンです。
Java言語では、これを行うことには2つの利点があります。
1.頻繁に使用されるオブジェクトの場合、オブジェクトの作成に費やされる時間は省略できます。
2。新しい操作の数が減少したため、システムメモリ使用量の頻度が減少し、GCの圧力が低下し、GCの一時停止の時間が短くなります。
シングルトンパターンセグメンテーション:
1。
パブリッククラスのsingleton {private singleton(){system.out.println( "singleton.singleton()"); } private static singleton singleton = new Singleton(); public static singleton getInstance(){return singleton; }}注:まず、シングルトンクラスには、シングルトンが他のシステムコードによってインスタンス化されないようにするために、プライベートアクセスレベルコンストラクターが必要です。次に、Singletonメンバー変数とgetInstance()メソッドは静的でなければなりません。
このシングルトンクラスは、作成が非常に簡単で、非常に信頼性が高くなります。唯一の欠点は、シングルトンを潜在的にロードできないことです。たとえば、Singleton作成プロセスは非常に遅く、メンバー変数は静的として定義されるため、JVMがSingletonクラスをロードすると、Singletonオブジェクトも作成されます。次に、Singletonオブジェクトが使用されているかどうかに関係なく、Singletonクラスが使用される場所にSingletonオブジェクトが作成されます。例えば:
パブリッククラスのsingleton {private singleton(){system.out.println( "singleton.singleton()"); } private static singleton singleton = new Singleton(); public static singleton getInstance(){return singleton; } public static void createString(){system.out.println( "singleton.createstring()"); }} 2。関連する関数の呼び出し速度を改善するには、怠zyな負荷メカニズムを導入する必要があります。
パッケージcom.luchao.singtonle; public class lazysingleton {private lazysingleton(){system.out.println( "lazysingleton.lazysingleton()"); } private static lazysingleton lazyinstance = null; public同期static lazysingleton getInstance(){if(lazyinstance == null)lazyinstance = new lazysingleton(); rater lazyinstance; }}静的変数Singletonの初期化の割り当てはnullであり、システムが起動したときに追加の負荷がないことを保証します。 getInstance()メソッドでは、現在のインスタンスが既に存在することが判断されます。存在する場合、戻ります。存在しない場合は、シングルトンが作成されます。 getInstance()は同期方法でなければなりません。マルチスレッド環境では、スレッド1がシングルトンを構築し、割り当てが完了する前に、スレッド2がインスタンスがnullであると判断するため、スレッド2がプログラムを開始して新しいシングルトンが作成されるためです。
上記の例では、荷重の遅延を実装していますが、同期方法を導入します。これには、マルチスレッド環境での最初のシングルトンプログラムよりもはるかに時間がかかります。
3.シングルトンパターンは内部クラスを使用してシングルトンの作成を維持します
public class staticsingleton {private staticsingleton(){system.out.println( "staticsingleton.staticsingleton()"); } private static class singletonholder {private static staticsingleton ataticsingleton = new staticsingleton(); } public static staticSingleton getInstance(){return singletonholder.ataticsingleton; }}StaticSingletonがロードされると、内側のクラスがインスタンス化されず、StaticSingletonクラスがJVMにロードされたときにSingletonクラスが初期化されないようにし、GetInstance()メソッドが呼び出され、インスタンスを初期化するときにSingletonHolderがロードされます。また、クラスがロードされたときにインスタンスを作成するためにも使用されるため、自然にスレッドに優しいです。
内部クラスを使用してシングルプロフィットモードを完了すると、遅延ロードを達成するだけでなく、同期キーワードを使用できます。比較的完全なアプローチです。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。