zoukankan      html  css  js  c++  java
  • 瞎扯设计模式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);
    
        }
    }

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

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

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

  • 相关阅读:
    源码分析:①ReentrantLock之公平锁和非公平锁
    源码分析:同步基础框架——AbstractQueuedSynchronizer(AQS)
    java 同步锁:synchronized 关键字
    Java 中的锁优化
    Java 魔法类:Unsafe 解析
    实战:SpringBoot 2.3.0新特性之优雅停机
    实战:windows下使用docker部署springboot web demo项目
    版本控制SVN的使用笔记
    Maven项目管理:SpringMVC+Mybatis+Velocity整合笔记
    java常用集合总结
  • 原文地址:https://www.cnblogs.com/m-yb/p/8833085.html
Copyright © 2011-2022 走看看