单例模式
单例模式分为懒汉式和饿汉式,饿汉式是指刚加载此类就创建类的对象,而懒汉式则是使用到此类才创建类的对象。
饿汉式是线程安全的,懒汉式是线程不安全的。
1)单例模式(饿汉式)
class Singleton { // 持有自己的对象 private static Singleton s = new Singleton(); // 私有化构造方法 private Singleton(){}; // 对外提供一个可以获取对象的方法 public static Singleton getInstance(){ return s; } }
2)单例模式(懒汉式) 线程不安全
class Singleton2 { // 持有自己的对象 private static Singleton2 s = null; // 私有化构造方法 private Singleton2(){}; // 对外提供一个可以获取对象的方法 public static Singleton2 getInstance(){ if(s == null){ s = new Singleton2(); } return s; } }
3)单例模式(懒汉式) 线程安全
class Singleton3 { // 持有自己的对象 private static Singleton3 s = new Singleton3(); // 私有化构造方法 private Singleton3(){}; // 对外提供一个可以获取对象的方法 public static Singleton3 getInstance(){ if(s == null){ synchronized (Singleton3.class){ s = new Singleton3(); } } return s; } // 对外提供一个可以获取对象的方法 public static synchronized Singleton3 getInstance2(){ if(s == null){ s = new Singleton3(); } return s; } }