シングルトンは何1
シングルトンパターンは、クラスのインスタンスを1つだけ確実にするために、システム全体のアクセスポイントのグローバルモデルのための方法を提供することです。
単一ケースの特性:
いずれの場合にも、常に唯一のシングルトンクラスのインスタンスが存在している
単一の実施形態は、この例では、システム全体を提供する能力を必要とするが一意である
実施例2のシングルモード単一の実施形態怠惰な
実装コード:
パブリッククラスMySingleton {
プライベート静的インスタンス= nullをMySingleton;
プライベートMySingleton(){}
パブリック静的MySingletonのgetInstance(){
試み{
IF(インスタンス= nullを!){//怠惰な男
}他{
//インスタンスを作成する前に、いくつかの時間のかかる準備作業かもしれ
Thread.sleep(300)。
= MySingleton新しい新しいインスタンス();
}
}キャッチ(InterruptedExceptionあるE){
e.printStackTrace();
}
戻りインスタンス;
}
}
いくつかの準備作業は、時間がかかるインスタンスを作成する前に処理される、マルチスレッドの呼び出しであると仮定する:
パブリッククラスMyThreadスレッド{延び
@Override
公共ボイドRUN(){
System.out.printlnは(MySingleton.getInstance()ハッシュコード());
}
公共の静的な無効メイン(文字列[] args){
MyThread [] =新しい新しいMTS MyThread [10];
{(; I <mts.length I ++ INT I = 0)するための
MTS [I](MyThread新しい新規=);
}
(INT J = 0; J <mts.length ; J ++){
MTS [J] .start();
}
}
}
実行結果として次れる:
1210420568
1210420568
1935123450
1718900954
1481297610
1863264879
369 539 795
1210420568
1210420568
602 269 801
シングルスレッド安全性の結果から分かるように、我々ができ、保証の実施形態ではなかったです次の解決策を作る
怠惰なスレッドの安全性の問題の3つの実施形態
の同期コードブロックの実装を
{クラスMySingletonパブリック
プライベート静的インスタンスMySingleton = NULL;
プライベートMySingleton(){}
//パブリック静的MySingletonのgetInstance(同期){
パブリック静的MySingletonのgetInstance(){
試み{
同期(MySingleton.class){
(= nullの場合!)IF {遅延//式
他は} {
//加工がインスタンス作成する前に、いくつかの準備作業があってもよい
のThread.sleep(300);
インスタンスMySingleton新しい新=();
}
}
}キャッチ(InterruptedExceptionある電子){
e.printStackTrace();
}
インスタンスを返します。
}
}
シングルトンパターンとスレッドの安全性の問題
おすすめ
転載: blog.csdn.net/qq_39581763/article/details/104197683
おすすめ
ランキング