目录
public class HungrySingleton { private static final HungrySingleton singleton = new HungrySingleton(); //限制外部产生HungrySingleton对象 private HungrySingleton(){ } //向外提供获取示例的静态方法 public static HungrySingleton getInstance() { return singleton; } //other methods} 饿汉模式是类加载时候就创建对象,利用了jvm特性保证了线程的安全性。
- getInstance()方法是static的保证了通过类名可直接获取实例
- 私有构造方法保证了只有自己才可以创建实例
懒汉模式
双重检查加锁 方式
1 public class LazySingleton { 2 private static volatile LazySingleton singleton = null; 3 4 private LazySingleton() { } 5 6 public static LazySingleton getSingleton() { 7 if (singleton == null) { //不用每次获取对象都强制加锁,为了提升了效率 8 synchronized (LazySingleton.class) { 9 if (singleton == null) { 10 singleton = new LazySingleton(); 11 } 12 } 13 } 14 return singleton; 15 } 16 } - 第7行代码判空是为了提高效率,不用每次获取对象都强制加锁;
- 第8行同步加锁是为了线程安全;
- 第9行判空是为了保证单例对象的唯一性,只有没被创建才去创建。
- volatile关键字为了保证singleton对象的可见性并禁止编译器对其进行编译指令重排序优化。
关键字: