java单例模式

单例模式

就是始终是一个对象实例.它对外不提供构造函数,因此我们不能够同时产生多个对象.(常用语工具类,数据库连接类等等)

单例模式的调用:因为单例模式的构造方法是私有的,所以在其他类中我们是没有办法直接实例化它的.但是又因为她对外提供了一个获取类实例的方法,所以不论有多少类调用,他对外只可能产生一个类的实例

在People类中;创建静态私有对象p;创建getInstance()方法来返回对象p;其他类可以直接调用getInstance()方法获取对象p。

线程不安全:

1.饿汉单例模式

public class People{
    private static People p = new People();
    private People(){
    }
    public static People getInstance(){
        return p;
    }
}

  

2.懒汉单例模式

public class People{
   private static People p;
   private People(){

  }
    public static People getInstance(){
       if(p == null){
            p = new People();
        }
       return p;
   }
}
 

好处:减少系统资源的消耗.因为这种工具类基本上贯穿程序始终,必然会频繁调用.如果每一次调用都要重新生成实例,带来的就是 在内存堆中,分配一部分内存空间.所以这种模式会提高程序的运行速度,减少资源消耗

3.利用枚举实现线程安全并且JVM安全的单例模式

 

// 线程安全,JVM安全的单例类
enum Singleton{
    SINGLE
}

// 单例类的使用
class Test{
    public static void main(String[] args) {
        Singleton s1 = Singleton.SINGLE;
        Singleton s2 = Singleton.SINGLE;
        Singleton s3 = Singleton.SINGLE;
    }
}

 

 

 

4.用内部类实现线程安全的单例模式

    class Singleton{
        //02 定义一个静态内部类
        private static class InnerClass{
            static Singleton singleton=new Singleton();
        }
        //03
        public static Singleton getsingleton(){
            return InnerClass.singleton;
        }
        //01
        private Singleton(){
            System.out.println("call Singleton()");
        }
    }

 

转载于:https://www.cnblogs.com/jiezai/p/10677707.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值