java中的单例模式

含义:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。

优点:减少系统开销

实现方式:1.饿汉式

                    2.懒汉式

                    3.双重检测锁式

                    4.静态内部类式

                    5.枚举单例

饿汉式:

package pattern;

public class SingletonDemo01 {
    private static SingletonDemo01 instance = new SingletonDemo01();
    private SingletonDemo01()
    {
        
    }
    public static SingletonDemo01 getinstance()
    {
        return instance;
    }
}


可以看出这种方法,instance实例的创建是在jvm初始化这个类时产生的,是没有延时加载的

想一想别的类中能否实例化这个对象,显然是不能的,因为它的构造器是私有的。

懒汉式:

package pattern;

public class SingletonDemo02 {
   private static SingletonDemo02 s;
   private SingletonDemo02()
   {
       
   }
   public static synchronized SingletonDemo02 getinstance()
   {
       if(s==null)
       {
        s= new SingletonDemo02();   
       }
       return s;
   }
}



这种懒汉式的方法虽然解决了延时加载的问题,但是会导致并发效率的降低,而且其实同步只需要第一次即可。

因为synchronized关键字的加入,使得不会同时有两个线程可以进入这个方法

双重检测锁式

package com.zw.mymaven;

public class SingletonDemo3 {
    private volatile static SingletonDemo3 instance;

    private SingletonDemo3() {
    };

    public static SingletonDemo3 getinstance() {
        if (instance == null) {
            synchronized (SingletonDemo3.class) {
                if (instance == null) {
                    instance = new SingletonDemo3();
                }
            }
        }
        return instance;
    }
}


静态内部类式

public class Singleton {    
    private static class LazyHolder {    
       private static final Singleton INSTANCE = new Singleton();    
    }    
    private Singleton (){}    
    public static final Singleton getInstance() {    
       return LazyHolder.INSTANCE;    
    }    
}  
枚举单例请自行百度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值