设计模式——单例模式

 目录

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对象的可见性并禁止编译器对其进行编译指令重排序优化。

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信