• 瞎扯设计模式1:单例模式 饿汉模式 懒汉模式 线程安全的单例 singleton 设计模式 java


    【原创声明】此文为本人原创,欢迎转载,转载请注明出处,作者链接~

    http://www.cnblogs.com/m-yb/p/8833085.html

    单例很常用,面试也经常被问,如:不用自定义锁怎么实现线程安全的单例?

    下面我将分别介绍饿汉、懒汉的单例(都是线程安全的):

    饿汉单例:

    package com.dayuanit.utils.hungry;
    
    public class Singleton {
        private static final Singleton instance = new Singleton();
        private Singleton(){}
        public static Singleton getInstance(){
            return instance;
        }
    }

    懒汉单例:

    package com.dayuanit.utils.lazy;
    
    public class Singleton {
        private static volatile Singleton instance;
        private Singleton(){}
        public static Singleton getInstance(){
            if (null == instance){
                synchronized (Singleton.class){
                    if (null == instance){
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }

    懒汉(静态内部类方式):

    //静态内部类方式
    public class Bird {
    
        private Bird(){
    
        }
    
        public static Bird getBird(){
            return BirdInstance.bird;
        }
    
        private static class BirdInstance{
            public static final Bird bird = new Bird();
        }
    }

    懒汉(枚举方式):

    //枚举方式
    public enum Person {
    
        instance;
    
        public static Person getPerson(){
            return instance;
        }
    
    }

    推荐枚举方式,静态内部类方式也可。

    上述单例可以用如下方式检验是否为单例,true则为单例:

    package com.dayuanit.utils.hungry;
    
    public class Test {
        public static void main(String[] args) {
            Singleton singleton1 = Singleton.getInstance();
            Singleton singleton2 = Singleton.getInstance();
    
            System.out.println(singleton1 == singleton2);
    
        }
    }

    完毕,各位看官觉得很赞的,留言评论,点赞~

    本人才疏学浅,有疑问有误的地方,欢迎讨论~

      没有英汉互译结果
      请尝试网页搜索

  • 相关阅读:
    2021.01.28 Rating赛
    2021.01.23 Rating赛补题报告
    Codeforces Round #104 (Div.2)补题报告
    Codeforces Beta Round #73(Div2)补题报告
    11.28天梯赛补题报告
    11月22日天梯训练补题报告
    11.14补题报告
    CCNA笔记
    Centos上安装mysql配置并授权远程连接部署项目
    web容器(03):Nginx配置负载均衡
  • 原文地址:https://www.cnblogs.com/m-yb/p/8833085.html
Copyright © 2020-2023  润新知