分析の1つの原則
2コードのチュートリアル
2.1原理解決
2.2ソリューション
分析の1つの原則
2コードのチュートリアル
2.1原理解決
テストカテゴリ:
パッケージcom.geely.design.pattern.creational.singleton。 輸入 java.io. * ; パブリック クラスのテスト{ / * パブリック静的無効メイン(文字列[] args){ //这样写异常、因为构造方法私有 // LazySingleton lazySingleton =新しいLazySingleton()。 LazySingleton lazySingleton = LazySingleton.getInstance()。 System.out.println(lazySingleton)。 } * / / * パブリック静的無効メイン(文字列[] args){ スレッドスレッド1 =新しいスレッド(新しいT())。 スレッドスレッド2 =新しいスレッド(新しいT()); thread1.start(); thread2.start(); System.out.println( "结束了の!!!"); } * / / ** *シリアライゼーションコードチュートリアル * HungrySingletonオブジェクトファイルに、そのファイルからオブジェクト、または同じオブジェクトを読み取りますか? *実際:等号リードノートに格納されているファイル(ハッシュコードを比較等しい)から * @paramの引数 * / パブリック 静的 ボイドメイン(文字列[]引数){ 試み{ // シングルトンオブジェクト出力ストリームに書き込まれ HangrySingletonインスタンス= HangrySingleton.getInstance(); ObjectOutputStreamのOOS = 新しい新しい ObjectOutputStreamの(新しい新たFileOutputStream(「singleton_file」)); oos.writeObject(インスタンス); // オブジェクトに入力ストリームから読み込みます ファイルのファイル= 新新ファイル( "singleton_file" ); ObjectInputStreamのOIS = 新しい ObjectInputStreamの(新しいFileInputStreamを(ファイル)); HangrySingleton instance2で = (HangrySingleton)ois.readObject(); System.out.println(インスタンス)。 System.out.println(instance2で)。 System.out.println(例えば == instance2で)。 } キャッチ(IOExceptionを電子){ e.printStackTrace(); } キャッチ(ClassNotFoundExceptionが電子){ e.printStackTrace(); } } }
エンティティクラス:
以下のためのパッケージ変更com.geely.design.pattern.creational.singleton; パブリック クラスHangrySingleton { / ** *プライベート定数、クラスがアップ割り当てられていたときに初期化を宣言。一度だけロードされた空腹の中国風のクラスの初期化。 *これは、マルチスレッドの問題は存在しません。 * / プライベート 最終 静的hangrySingleton HangrySingleton、 静的{ hangrySingleton = 新しい新しいHangrySingleton(); } / ** *宣言プライベートコンストラクタ * / プライベートHangrySingleton(){ } / ** *オブジェクト取得する外部インターフェース提供 * @return * / 公開 静的HangrySingletonのgetInstance(){ 返すhangrySingletonを。 } }
印刷ログ:
"C:\プログラムファイル\のJava \ jdk1.7.0_79 \ビン\ののjava.exe"「-javaagent:D:\ Javaの\ devolopKitの\アイデア\ anZh \のIntelliJ IDEA Community Editionを2018年1月4日のlib \ \ idea_rt.jar = 22216 :D:\ Javaの\のdevolopKitの\アイデア\ anZhのIntelliJ IDEA Community Editionの\ binに2018年1月4日\ "の-Dfile.encoding = UTF-8 -classpath" C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ charsets.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ deploy.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\アクセス・ブリッジ-64。瓶; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ dnsns.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ jaccess.jar; C: \プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ localedata.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ sunec.jar; C:\プログラムファイル\ Javaの\ jdk1.7.0_79 \ JRE \ libに\ extに\ sunjce_provider.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ sunmscapi.jar; C:\プログラムファイル\のJava \ jdk1。 7。0_79 \ JRE \ libに\ extに\ zipfs.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ javaws.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ jce.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ jfr.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ jfxrt.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\のjsse.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1。 7.0_79 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ RT .jar; F:\ xiangmu3 \新\アイデア\ design_patternの\ターゲット\クラス」0_79 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ rt.jarの; F:\ xiangmu3 \新\アイデア\ design_pattern \ターゲット\クラス」0_79 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ rt.jarの; F:\ xiangmu3 \新\アイデア\ design_pattern \ターゲット\クラス」com.geely.design.pattern.creational.singleton.Test java.io.NotSerializableException:com.geely.design.pattern.creational.singleton.HangrySingleton java.io.ObjectOutputStream.writeObject0で(ObjectOutputStream.java: 1183 ) のjavaで。 io.ObjectOutputStream.writeObject(ObjectOutputStream.java: 347 ) com.geely.design.pattern.creational.singleton.Test.mainで(Test.java: 33 )、 終了コードで終了プロセス 0
2.2ソリューション
テストカテゴリ:
パッケージcom.geely.design.pattern.creational.singleton。 輸入 java.io. * ; パブリック クラスのテスト{ / * パブリック静的無効メイン(文字列[] args){ //这样写异常、因为构造方法私有 // LazySingleton lazySingleton =新しいLazySingleton()。 LazySingleton lazySingleton = LazySingleton.getInstance()。 System.out.println(lazySingleton)。 } * / / * パブリック静的無効メイン(文字列[] args){ スレッドスレッド1 =新しいスレッド(新しいT())。 スレッドスレッド2 =新しいスレッド(新しいT()); thread1.start(); thread2.start(); System.out.println( "结束了の!!!"); } * / / ** *シリアライゼーションコードチュートリアル * HungrySingletonオブジェクトファイルに、そのファイルからオブジェクト、または同じオブジェクトを読み取りますか? *実際:等号リードノートに格納されているファイル(ハッシュコードを比較等しい)から * @paramの引数 * / パブリック 静的 ボイドメイン(文字列[]引数){ 試み{ // シングルトンオブジェクト出力ストリームに書き込まれ HangrySingletonインスタンス= HangrySingleton.getInstance(); ObjectOutputStreamのOOS = 新しい新しい ObjectOutputStreamの(新しい新たFileOutputStream(「singleton_file」)); oos.writeObject(インスタンス); // オブジェクトに入力ストリームから読み込みます ファイルファイル= 新しいファイル( "singleton_file" ); ObjectInputStreamのOIS = 新しい ObjectInputStreamの(新しいFileInputStreamを(ファイル)); HangrySingleton instance2で = (HangrySingleton)ois.readObject(); System.out.println(インスタンス)。 System.out.println(instance2で)。 System.out.println(例えば == instance2で)。 } キャッチ(IOExceptionを電子){ e.printStackTrace(); } キャッチ(ClassNotFoundExceptionが電子){ e.printStackTrace(); } } }
エンティティクラス:
以下のためのパッケージ変更com.geely.design.pattern.creational.singleton、 インポートしたjava.io.Serializable; パブリック クラス HangrySingleton 実装はシリアライズ { / ** *プライベート定数を宣言し、クラスがアップ割り当てられていたときに初期化。一度だけロードされた空腹の中国風のクラスの初期化。 *これは、マルチスレッドの問題は存在しません。 * / プライベート 最終 静的HangrySingleton hangrySingleton、 静的{ hangrySingleton = 新しい新しいHangrySingleton(); } / ** *プライベートコンストラクタを宣言 * / プライベートHangrySingleton(){ } / ** * * / オブジェクトはreadResolveプライベート(){ hangrySingletonを返す; } / ** *オブジェクトを取得するための外部インタフェースを提供 * @return * / パブリック 静的HangrySingletonのgetInstance(){ 戻りhangrySingletonを; } }
印刷ログ:
"C:\プログラムファイル\のJava \ jdk1.7.0_79 \ビン\ののjava.exe"「-javaagent:D:\ Javaの\ devolopKitの\アイデア\ anZh \のIntelliJ IDEA Community Editionを2018年1月4日のlib \ \ idea_rt.jar = 22084 :D:\ Javaの\のdevolopKitの\アイデア\ anZhのIntelliJ IDEA Community Editionの\ binに2018年1月4日\ "の-Dfile.encoding = UTF-8 -classpath" C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ charsets.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ deploy.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\アクセス・ブリッジ-64。瓶; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ dnsns.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ jaccess.jar; C: \プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ localedata.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ sunec.jar; C:\プログラムファイル\ Javaの\ jdk1.7.0_79 \ JRE \ libに\ extに\ sunjce_provider.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ sunmscapi.jar; C:\プログラムファイル\のJava \ jdk1。 7。0_79 \ JRE \ libに\ extに\ zipfs.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ javaws.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ jce.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ jfr.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ jfxrt.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\のjsse.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1。 7.0_79 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ RT .jar; F:\ xiangmu3 \新\アイデア\ design_patternの\ターゲット\クラス」0_79 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ rt.jarの; F:\ xiangmu3 \新\アイデア\ design_pattern \ターゲット\クラス」0_79 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ rt.jarの; F:\ xiangmu3 \新\アイデア\ design_pattern \ターゲット\クラス」com.geely.design.pattern.creational.singleton.Test com.geely.design.pattern.creational.singleton.HangrySingleton@5c67aece com.geely.design.pattern.creational.singleton.HangrySingleton@5c67aece 真 プロセスは終了コードで終了 0