博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java设计模式----单例模式
阅读量:4602 次
发布时间:2019-06-09

本文共 1163 字,大约阅读时间需要 3 分钟。

单例模式:

  确保一个类只有一个实例,并提供一个全局访问点

饿汉式:(线程安全)

public class Singleton {

  private static Singleton uniqueInstance = new Singleton();
  private Singleton() {
  }
  public static Singleton getInstance() {
    return uniqueInstance;
  }
}

懒汉式:(线程不安全)

public class Singleton {

  private static Singleton uniqueInstance;
  private Singleton() {
  }
  public static Singleton getInstance() {
    if (uniqueInstance == null) {
      uniqueInstance = new Singleton();
    }
    return uniqueInstance;
  }
}

 

双重检查加锁:(线程安全)

public class Singleton {

  private volatile static Singleton uniqueInstance;
  private Singleton() {
  }
  public static Singleton getInstance() {
    if (uniqueInstance == null) {
      synchronized (Singleton.class) {
        if (uniqueInstance == null) {
          uniqueInstance = new Singleton();
        }
      }
    }
    return uniqueInstance;
  }
}

 

要点:

  1、单例模式确保程序中一个类最多只有一个实例

  2、单例模式也提供访问这个实例的全局点

  3、在Java中实现单例模式需要私有的构造器,一个静态方法和一个静态变量

  4、确定在性能和资源上的限制,然后小心地选择适当的方案来实现单例,以解决多线程的问题

  5、如果不是采用第五的Java2,双重检查加锁实现会失效

  6、小心,你如果使用多个类加载器,可能导致单例失效而产生多个实例

  7、如果使用JVM1.2或之前的版本,你必须建立单例注册表,以免垃圾收集器将单例回收

转载于:https://www.cnblogs.com/stanljj/p/6985677.html

你可能感兴趣的文章
[转]如何成为优秀的程序员
查看>>
unity3d 幻灯片效果实现
查看>>
AFNetworking 进行网络监测
查看>>
iOS获取状态栏和导航栏尺寸(宽度和高度)
查看>>
极光推送
查看>>
openTK学习
查看>>
根据角色获取用户组
查看>>
HTML5之pushstate、popstate操作history,无刷新改变当前url
查看>>
2048游戏:(一)运行效果
查看>>
[转载] 数据库的垂直切分和水平切分
查看>>
ReentrantLock可重入锁的使用场景
查看>>
LOJ#6277. 数列分块入门 1
查看>>
frame外弹出,刷新父页面
查看>>
爬虫一
查看>>
Linux 网络工具详解之 ip tuntap 和 tunctl 创建 tap/tun 设备
查看>>
JavaScript之Array/数组小结
查看>>
证券概念
查看>>
MSD3393/MSD3463 屏参及REG对照表
查看>>
delphi xe10 蓝牙
查看>>
maven(二) maven项目构建ssh工程(父工程与子模块的拆分与聚合)
查看>>