1.饿汉式
//饿汉式 public class Singleton { private static Singleton singleton = new Singleton(); private Singleton(){}; public static Singleton getsingleton(){ return singleton; } }
2.懒汉式
//懒汉式(线程不安全) public class Singleton { private static Singleton singleton = null; private Singleton(){}; public static Singleton getsingleton(){//多个线程同时进入会创建多次实例 if (singleton == null){ singleton = new Singleton(); } return singleton; } }
3.懒汉式加同步锁
public class Singleton { private static Singleton singleton = null; private Singleton(){}; public synchronized static Singleton getsingleton(){//加同步锁,但是会造成大量线程堵塞 if (singleton == null){ singleton = new Singleton(); } return singleton; } }
4.双重锁
public class Singleton { private static Singleton singleton = null; private Singleton(){}; public static Singleton getsingleton(){ if (singleton == null){ synchronized (Singleton.class){//双重锁 if (singleton == null){ singleton = new Singleton(); } } } return singleton; } }
其实还有不足,但是我不会写了。