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

    什么是设计模式

    • 一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。简单理解:特定问题的固定解决方法。
    • 好处:使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、重用性。

    单例模式

    • 单例(Singleton):只允许创建一个该类的对象。

    饿汉式

    • 类加载的时候创建,天生线程安全。
    • 优点:线程安全
    • 缺点:生命周期太长,浪费空间
    package com.kingtl.SingleDemo;
    
    /**
     * 饿汉式单例
     * 1、创建一个常量
     * 2、构造方法私有化,类外部不能创建对象
     * 3、通过一个公开方法,来返回这个对象
     */
    public class SingleTon {
        private static final SingleTon instance = new SingleTon();
        private SingleTon() {}
        public static SingleTon getInstance() {
            return instance;
        }
    }
    

    测试:

    package com.kingtl.SingleDemo;
    
    public class TestSingleTon {
        public static void main(String[] args) {
            for (int i = 0; i < 3; i++) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        System.out.println(SingleTon.getInstance().hashCode());
                    }
                }).start();
            }
        }
    }
    

    懒汉式

    • 使用时创建,线程不安全,加同步(可加1、同步方法(在方法上加上synchronized),或者2、同步代码块 ,为了执行效率,如果有一个线程执行过,就无需其他线程进入同步代码块)
    • 优点:生命周期短,节省空间
    • 缺点:有线程安全问题
    package com.kingtl.SingleDemo;
    
    /**
     * 懒汉式单例
     * 1、创建一个对象,赋值为 null
     * 2、构造方法私有化,类外部不能创建对象
     * 3、通过一个公开方法,来返回这个对象
     */
    public class SingleTon2 {
        // 创建对象
        private static SingleTon2 instance = null;
        // 私有化构造方法
        private SingleTon2() {}
        // 创建一个静态方法
        public static SingleTon2 getInstance() {
            if (instance == null) {  // 提高执行效率
                synchronized (SingleTon2.class) {
                    if (instance == null) {
                        instance = new SingleTon2();
                    }
                }
            }
            return instance;
        }
    }
    
    

    懒汉式-静态内部类写法

    package com.kingtl.SingleDemo;
    
    /**
     * 静态内部类写法
     */
    public class SingleTon3 {
        private SingleTon3() {}
        private static class Holder {
            static SingleTon3 instance = new SingleTon3();
        }
        public static SingleTon3 getInstance(){
            return Holder.instance;
        }
    }
    
    
  • 相关阅读:
    感觉每天打开自己的博客园, 想编程的心情就多了起来~~~
    算法图解相关代码整理
    github cli
    What's WebFlux ? And how to use it ? 一股有咖喱味的WebFlux简介
    style
    gradle 1
    gradle打包可运行jar
    外面下着雨
    天晴朗 看花儿多多开放
    Full Stack Reactive with React and Spring WebFlux
  • 原文地址:https://www.cnblogs.com/KingTL/p/13521178.html
Copyright © 2011-2022 走看看