zoukankan      html  css  js  c++  java
  • Java 单例模式之懒汉模式和饿汉模式 以及线程安全

    Java 单例模式分 懒汉模式 和 饿汉模式

    单例模式主要运用于频繁的调用不需要创建新的实例这种情况, 例如工具类,数据库操作类等。 

    单例模式需要将构造方法私有化,防止创建对象。

    饿汉模式:

    package tt;
    
    public class Singleton {
    
        private static Singleton sign = new Singleton();
    
        private Singleton() {
        }
    
        public static Singleton getSign() {
            return sign;
        }
    
    }

    饿汉模式初始化就创建了对象, 每次调用都返回同一个对象。

    饿汉模式是线程安全的。

    懒汉模式:

    package tt;
    
    public class Singleton {
    
        private static Singleton sign = null;
    
        private Singleton() {
        }
    
        public static Singleton getSign() {
            if(null==sign){
                sign =new Singleton();
            }
            return sign;
        }
    
    }

    与饿汉模式的区别是初始化不创建对象, 在使用的时候判断, 如果没有才创建。

    这样在多线程的环境下会存在线程安全问题。 解决方法就是线程加锁

    效率比较高的加锁方法:

    package tt;
    
    public class Singleton {
    
        private static Singleton sign = null;
    
        private Singleton() {
        }
    
        public static Singleton getSign() {
            // 当前对象为null 的话才进入同步块
            if (null == sign) {
                synchronized (Singleton.class) {
                    if (null == sign) {
                        sign = new Singleton();
                    }
                }
            }
            return sign;
        }
    
    }
  • 相关阅读:
    对图像边缘进行随机均匀采样的C#算法实现
    [淡藤]最近几年在Chinapub上买的书
    重新认识C#: 玩转指针
    又是一年春来到
    需求定律在起着作用
    haha, 愚人节听鱼人歌
    名字就叫奥格工作室!
    effective c++ 第六章
    com 名字对象(1)IBindCtx
    com 名字对象(2)创建名字对象(IMoniker)
  • 原文地址:https://www.cnblogs.com/Marvellous/p/4533409.html
Copyright © 2011-2022 走看看