zoukankan      html  css  js  c++  java
  • 单例模式

    1、饿汉式 (静态常量)

    public class Singleton {

    private final static Singleton INSTANCE = new Singleton();

    private Singleton(){}

    public static Singleton getInstance(){
    return INSTANCE;
    }
    }

    2、饿汉式(静态代码块)

    public class Singleton {

    private static Singleton instance;

    static {
    instance = new Singleton();
    }

    private Singleton() {}

    public static Singleton getInstance() {
    return instance;
    }
    }

    3、懒汉式(线程不安全)

    public class Singleton {

    private static Singleton singleton;

    private Singleton() {}

    public static Singleton getInstance() {
    if (singleton == null) {
    singleton = new Singleton();
    }
    return singleton;
    }
    }

    4、懒汉式(线程安全,同步方法)

    public class Singleton {

    private static Singleton singleton;

    private Singleton() {}

    public static synchronized Singleton getInstance() {
    if (singleton == null) {
    singleton = new Singleton();
    }
    return singleton;
    }
    }

    5、懒汉式(线程安全,同步代码块)

    public class Singleton {

    private static Singleton singleton;

    private Singleton() {}

    public static Singleton getInstance() {
    if (singleton == null) {
    synchronized (Singleton.class) {
    singleton = new Singleton();
    }
    }
    return singleton;
    }
    }

    6、双重检查[推荐用]

    public class Singleton {

    private static volatile Singleton singleton;

    private Singleton() {}

    public static Singleton getInstance() {
    if (singleton == null) {
    synchronized (Singleton.class) {
    if (singleton == null) {
    singleton = new Singleton();
    }
    }
    }
    return singleton;
    }
    }

    7、静态内部类[推荐用]

    public class Singleton {

    private Singleton() {}

    private static class SingletonInstance {
    private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance() {
    return SingletonInstance.INSTANCE;
    }
    }

    8、枚举[推荐用]

    public enum Singleton {
        INSTANCE;
        public void whateverMethod() {
    
        }
    }
  • 相关阅读:
    Redis分布式限流器
    [转] 详解Spring boot启动原理
    [转] 总结了N个真实线上故障
    加一(66)
    原地删除(27)
    旋转数组(189)
    买卖股票的最佳时机 II(122)
    最长公共前缀(14)
    两个数组的交集II(350)
    Django时区及naive datetime object和aware datetime object的区别
  • 原文地址:https://www.cnblogs.com/yuyangcoder/p/10019944.html
Copyright © 2011-2022 走看看