单例模式(保证线程安全)

校招中最常考的 设计模式 之⼀.
单例模式具体的实现方式有很多,最常见的是 饿汉 懒汉 两种
饿汉模式:
类加载的时候同时创建实例。
class Singleton{
        private static Singleton instance = new Singleton();
        private Singleton(){}
        public static Singleton getInstance(){
                return instance;
        }
}
懒汉模式-单线程版
类加载的时候不创建实例,第一次使用时才创建实例
class Singleton { private static Singleton instance = null ;
        private Singleton () {}
        public static Singleton getInstance () {
               if (instance == null ) {
                instance = new Singleton ();
               }
        return instance;
        }
}
懒汉模式-多线程版
如果在多线程中沿用上面的懒汉模式是不安全的。
加上 synchronized 可以改善这⾥的线程安全问题.
class Singleton {
        private static Singleton instance = null ;
        private Singleton () {}
        public synchronized static Singleton getInstance () {
                if (instance == null ) {
                        instance = new Singleton ();
                }
                return instance;
        }
}
线程安全的问题发生在首次创建实例的时候,如果在多个线程中调用getlnsance方法就可能导致创建出多个实例。
一旦实力已经创建好了,后面的线程再多也没有问题
加入synchronized就可以解决这种问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值