1 principle of analytic
2 Code Walkthrough
2.1 Principle resolved
2.2 Solution
1 principle of analytic
2 Code Walkthrough
2.1 Principle resolved
Test categories:
package com.geely.design.pattern.creational.singleton; import java.io.*; public class Test { /*public static void main(String [] args){ //这样写异常,因为构造方法私有 // LazySingleton lazySingleton = new LazySingleton(); LazySingleton lazySingleton = LazySingleton.getInstance(); System.out.println(lazySingleton); }*/ /* public static void main(String [] args){ Thread thread1 = new Thread(new T()); Thread thread2 = new Thread(new T()); thread1.start(); thread2.start(); System.out.println("结束了!!!"); } * / / ** * serialization code walkthrough * HungrySingleton objects in the file, and then read the object from the file, or the same object? * Actual: from a file stored in the read note when a equals (equals compare the hash code) * @param args * / public static void main (String [] args) { the try { // the singleton object is written to the output stream HangrySingleton instance = HangrySingleton.getInstance (); the ObjectOutputStream OOS = new new the ObjectOutputStream ( new new a FileOutputStream ( "singleton_file" )); oos.writeObject (instance); // read from the input stream to the object File file = new new File("singleton_file"); ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file)); HangrySingleton instance2 = (HangrySingleton) ois.readObject(); System.out.println(instance); System.out.println(instance2); System.out.println(instance==instance2); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
Entity classes:
Package Penalty for com.geely.design.pattern.creational.singleton; public class HangrySingleton { / ** * declare private constants, initialized when the class had been assigned up. Hungry Chinese-style class initialization when loaded only once. * It does not exist multi-threading problems. * / Private Final static hangrySingleton HangrySingleton; static { hangrySingleton = new new HangrySingleton (); } / ** * declare a private constructor * / Private HangrySingleton () { } / ** * provide an external interface to obtain the object * @return * / public static HangrySingleton the getInstance () { return hangrySingleton; } }
Print log:
"C:\Program Files\Java\jdk1.7.0_79\bin\java.exe" "-javaagent:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\lib\idea_rt.jar=22216:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.7.0_79\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfxrt.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\rt.jar;F:\xiangmu3\Xin\Idea\design_pattern\target\classes" com.geely.design.pattern.creational.singleton.Test java.io.NotSerializableException: com.geely.design.pattern.creational.singleton.HangrySingleton at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) at com.geely.design.pattern.creational.singleton.Test.main(Test.java:33) Process finished with exit code 0
2.2 Solution
Test categories:
package com.geely.design.pattern.creational.singleton; import java.io.*; public class Test { /*public static void main(String [] args){ //这样写异常,因为构造方法私有 // LazySingleton lazySingleton = new LazySingleton(); LazySingleton lazySingleton = LazySingleton.getInstance(); System.out.println(lazySingleton); }*/ /* public static void main(String [] args){ Thread thread1 = new Thread(new T()); Thread thread2 = new Thread(new T()); thread1.start(); thread2.start(); System.out.println("结束了!!!"); } * / / ** * serialization code walkthrough * HungrySingleton objects in the file, and then read the object from the file, or the same object? * Actual: from a file stored in the read note when a equals (equals compare the hash code) * @param args * / public static void main (String [] args) { the try { // the singleton object is written to the output stream HangrySingleton instance = HangrySingleton.getInstance (); the ObjectOutputStream OOS = new new the ObjectOutputStream ( new new a FileOutputStream ( "singleton_file" )); oos.writeObject (instance); // read from the input stream to the object File file = new File("singleton_file"); ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file)); HangrySingleton instance2 = (HangrySingleton) ois.readObject(); System.out.println(instance); System.out.println(instance2); System.out.println(instance==instance2); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
Entity classes:
Package Penalty for com.geely.design.pattern.creational.singleton; Import the java.io.Serializable; public class HangrySingleton the implements Serializable { / ** * declare private constants, initialized when the class had been assigned up. Hungry Chinese-style class initialization when loaded only once. * It does not exist multi-threading problems. * / Private Final static HangrySingleton hangrySingleton; static { hangrySingleton = new new HangrySingleton (); } / ** * declare a private constructor * / Private HangrySingleton () { } / ** * * / Object readResolve Private () { return hangrySingleton; } / ** * provide an external interface to obtain the object * @return * / public static HangrySingleton the getInstance () { return hangrySingleton; } }
Print log:
"C:\Program Files\Java\jdk1.7.0_79\bin\java.exe" "-javaagent:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\lib\idea_rt.jar=22084:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.7.0_79\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfxrt.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\rt.jar;F:\xiangmu3\Xin\Idea\design_pattern\target\classes" com.geely.design.pattern.creational.singleton.Test com.geely.design.pattern.creational.singleton.HangrySingleton@5c67aece com.geely.design.pattern.creational.singleton.HangrySingleton@5c67aece true Process finished with exit code 0