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;
        }
    
    }
  • 相关阅读:
    [NOI2017]游戏
    [USACO09MAR]Cleaning Up
    [POI2010]Blocks
    [JSOI2011]分特产
    [POI2001]Peaceful Commission
    BZOJ4152 [AMPPZ2014]The Captain
    Luogu P3783 [SDOI2017]天才黑客
    Luogu P3645 [APIO2015]雅加达的摩天楼
    Luogu P1613 跑路
    AGC009E Eternal Average
  • 原文地址:https://www.cnblogs.com/Marvellous/p/4533409.html
Copyright © 2011-2022 走看看