シングルトン - 怠惰な人間と飢え詳細な式

このクラスの唯一のインスタンスことが次のシーンを確実にするために適用されるスキーマのシングルモードの実施形態を作成し、そしてたBeanFactoryばねこのようなグローバルアクセスポイントとしてのアクセスポイントへのグローバルアクセスを提供するために属する、スプリングは全て豆でありますこれは、単一の実施形態です。

シングルトンの特長:唯一のインスタンス全体のプロセスを終了させるシステムからスタート。
使用シングルトンの文言:フォーミュラ怠惰な、飢えタイプ、タイプを登録し、式のシーケンス。
怠惰な人間と飢えのタイプについては、以下の比較:

レイジータイプ:デフォルトの場合は、新しい時に使用してインスタンス化していません。

レイジークラス{パブリック
プライベートレイジー(){}
//デフォルトの際に使用する、インスタンス化時にされていない新しい新しい
プライベート静的レイジー怠惰= NULL;
パブリック静的レイジー同期のgetInstance(){
IF(怠惰==ヌル){
怠惰=新新怠惰();
}
;遅延を返す
}
}
、それがインスタンス化されるときに、クラスローディング、およびシングルトンオブジェクトを作成し、以下の式を飢え。

空腹{クラス公開
プライベート空腹(){}
//クラスのインスタンスにロードされ、そして作成シングルトンオブジェクト
プライベート新しい新しい静的最終空腹空腹空腹=();
パブリック静的空腹のgetInstance(){
空腹返す;
}
}
 遅延式そして、空腹中国風の違い:

インスタンス化:とき外部呼び出しがときに新しい怠惰な男は、デフォルトのインスタンスを作成しません。式インスタンス化クラスローディングを飢えて、シングルトンオブジェクトを作成するとき。
スレッドの安全性:空腹の男スタイルのスレッドセーフ(スレッドがインスタンス化される前に現れたので、空腹の男のスレッドが安全でなければなりません)。怠惰な人間の負担が行く新しいインスタンスを使用しているので、安全には(、あなたは新しい時間に行く怠惰なスタイルのスレッドのような方法、に実装される動的なプロセスである:パブリック静的同期レイジーのgetInstance() {(遅延== NULLの){場合怠惰=新たな遅延が();} この時間はこの例にアクセスする複数のスレッドを有する場合、この時間インスタンスが存在しない場合、新しい新しい依然として、どのように多くのスレッドで、プロセスに入ります。どのように多くの新しいインスタンスになります。それは最終的にそれを返すそのうちの一つの方法は唯一、1つのインスタンスを返すことができますか?新しいの多くの例を上書きしないのですか?もちろん、このような状況を解決することができ、それが起きてからこれを避けるために、同期ロックを追加することです)。
効率の実装:飢えた男は、ロックのいずれかのタイプを追加していないので、効率が比較的高いです。怠惰な人間は、同期ロックを追加する一般的に使用され、効率が式を飢えよりも悪いです。
パフォーマンス:クラスがロードされると、関係なく、あなたが使用しているかどうかの、それがスペースを占有し、インスタンス化します初期化飢えた男のスタイル、メモリが無駄になります。あなたは相対的に言ったときに、インスタンス化する必要が怠惰な人間は、メモリの無駄ではありません。

おすすめ

転載: www.cnblogs.com/hyhy904/p/10958554.html