如何编写单例模式

 时间:2024-10-13 22:14:26

1、懒汉式单例模式

2、懒汉式单例模式能实现懒加载,即在调用类的getInstance()方法时才创建单例对象.但这样需要我们在getInstance()方法上加锁,手动保证线程安全.

3、// 懒汉式单例模式写法class Singleton { // 将单例对象设为类变量 private static volatile Singleton instance; // 将构造函数私有化 private Singleton() { } // 获取单例对象的方法 // 使用synchronized将判断与赋值操作合并为原子操作 public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; }}

4、有一种错误的懒汉式写法,这种写法只将获取单例对象的代艨位雅剖码放入同步代码块.这种做法的本意是希望在创建出单颖蓟段扛例对象后再去获取单例对象不会引发线程同步,然而事与愿违,这种做法是错误的,因为判断与创建对象并不是一个原子操作,仍然会有多个线程进入同步代码块并多次创建对象.实际上,要想达到这种效果,可以使用双重检查式写法.// 懒汉式单例模式错误写法class Singleton { // 将单例对象设为类变量 private static volatile Singleton instance; // 将构造函数私有化 private Singleton() { } // 获取单例对象的方法 public static Singleton getInstance() { if (instance == null) { // 本意是想让创建对象时才进行线程同步,保证线程安全 // 但是实际情况是,可能有多个线程进入该同步代码块,多次创建对象 synchronized(Singleton.class) { instance = new Singleton(); } } return instance; }}

  • 黑玉米的功效与作用
  • 软件缺陷的类型有哪些?
  • 身处职场,你需要做什么?
  • 一年级新生入学怎么办?怎样做好入学准备教育?
  • 还款压力大怎么办
  • 热门搜索
    苹果一体机怎么样 怎么说分手 飨怎么读音 怎么看自己手机号码 政审表怎么填 怎么备份手机通讯录 电脑中毒了怎么办 发高烧怎么办 自评怎么写 怎么炖鸡