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#中String跟string的“区别”
    C#中的this关键字
    (转)VS2015基础 指定一个或多个项目执行
    C# 中如何输出双引号(转义字符的使用)
    (转) C#中使用throw和throw ex抛出异常的区别
    springboot
    Zookeeper
    Maven
    springboot
    springboot
  • 原文地址:https://www.cnblogs.com/Marvellous/p/4533409.html
Copyright © 2011-2022 走看看