public class Singleton { private Singleton(){ System.out.println("Singleton is create"); } private static Singleton instance = new Singleton(); public static Singleton getInsatnce(){ return instance; } }
public class Singleton { private Singleton(){ System.out.println("Singleton is create"); } private static Singleton instance = new Singleton(); public static Singleton getInsatnce(){ return instance; } public static void createString(){ System.out.println("createString in Singleton"); }
public static void main(String[] args){ Singleton.createString(); } }
public class Singleton implements Runnable{ private Singleton(){ System.out.println("Singleton is create"); } private static Singleton instance = new Singleton(); public static Singleton getInsatnce(){ return instance; } public static void createString(){ System.out.println("createString in Singleton"); }
@Override public void run() { // TODO Auto-generated method stub long beginTime = System.currentTimeMillis(); for(int i=0;i<10000;i++){ Singleton.getInsatnce(); } System.out.println(System.currentTimeMillis() - beginTime); }
public static void main(String[] args){ //Singleton.createString(); for(int i=0;i<5;i++){ new Thread(new Singleton()).start(); } }
}
Show moreShow more icon
清单 6 所示代码运行的输出如清单 7 所示:
清单 7. 清单 6 代码运行后输出
1 2 3 4 5 6 7 8 9 10 11 12
Singleton is create Singleton is create Singleton is create 0 Singleton is create Singleton is create 0 0 Singleton is create 0 0
public class LazySingleton implements Runnable{ private LazySingleton(){ System.out.println("LazySingleton is create"); } private static LazySingleton instance = null; public static synchronized LazySingleton getInstance(){ if(instance == null){ instance = new LazySingleton(); } return instance; } public static void createString(){ System.out.println("create String"); }
@Override public void run() { // TODO Auto-generated method stub long beginTime = System.currentTimeMillis(); for(int i=0;i<1000000;i++){ LazySingleton.getInstance(); } System.out.println(System.currentTimeMillis() - beginTime); }
public static void main(String[] args){ //LazySingleton.createString(); for(int i=0;i<5;i++){ new Thread(new LazySingleton()).start(); } }
}
Show moreShow more icon
清单 9. 清单 8 代码运行后输出
1 2 3 4 5 6 7 8 9 10 11 12
LazySingleton is create LazySingleton is create LazySingleton is create LazySingleton is create LazySingleton is create LazySingleton is create 1139 1202 1234 1218 1234
Show moreShow more icon
为了解决同步关键字降低系统性能的缺陷,做了一定改进,代码如清单 10 所示:
清单 10. 解决同步关键字低效率
1 2 3 4 5 6 7 8 9 10 11 12
public class StaticSingleton { private StaticSingleton(){ System.out.println("StaticSingleton is create"); } private static class SingletonHolder{ private static StaticSingleton instance = new StaticSingleton(); } public static StaticSingleton getInstance(){ return SingletonHolder.instance; } }
Reprint policy:
All articles in this blog are used except for special statements
CC BY 4.0
reprint policy. If reproduced, please indicate source
John Doe
!