单例模式

1、饿汉式(非线程安全)

1 public class Singleton1 {
2     private Singleton1() {
3     }
4     private static Singleton1 instance = new Singleton1();
5     
6     public static Singleton1 getInstance(){
7         return instance;
8     }
9 }

 

2、懒汉式(非线程安全)

 1 public class Singleton2 {
 2     private Singleton2() {
 3     }
 4     private static Singleton2 instance = null;
 5     public static Singleton2 getInstance(){
 6         if (instance == null){
 7             instance = new Singleton2();
 8         }
 9         return instance;
10     }
11 }

 3、懒汉式(线程安全)

 1 public class Singleton3 {
 2     private Singleton3() {
 3     }
 4     private static Singleton3 instance = null;
 5     public synchronized static Singleton3 getInstance(){
 6         if (instance == null){
 7             instance = new Singleton3();
 8         }
 9         return instance;
10     }
11 }

 

4、双重检查

 1 public class Singleton4 {
 2     private Singleton4() {
 3     }
 4     private volatile static Singleton4 instance = null;
 5     public static Singleton4 getInstance(){
 6         if (instance == null){//1
 7             synchronized (Singleton4.class) {
 8                 if (instance == null)//2
 9                     instance = new Singleton4();
10             }
11         }
12         return instance;
13     }
14 }

 5、静态私有内部类

 1 public class Singleton5 {
 2     private Singleton5() {
 3     }
 4     private static class SingletonHolder{
 5         private static Singleton5 instance = new Singleton5();
 6     }
 7     public static Singleton5 getInstance(){
 8         return SingletonHolder.instance;
 9     }
10 }

 

posted @ 2019-11-26 18:36  眉间雪丶  阅读(111)  评论(0)    收藏  举报