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

    Singleton1.java

    package edu.singleton;
    
    /***
     * 把该类设计成单例设计模式(饿汉式)
     */
    public class Singleton1 {
        // 定义一个本类对象并实例化
        private static Singleton1 singleton = new Singleton1();
    
        // 构造方法私有化
        private Singleton1() {
        };
    
        public static Singleton1 getInstance() {
            return singleton;
        }
    
        public void print() {
            System.out.println("饿汉式--单例设计模式");
        }
    }

    SingletonDemo.java

    package edu.singleton;
    
    public class SingletonDemo {
        public static void main(String[] args) {
            Singleton1 singleton1 = Singleton1.getInstance();
            singleton1.print();
            Singleton1 singleton2 = Singleton1.getInstance();
            singleton2.print();
            System.out.println(singleton1 == singleton2);
    
        }
    }
    /*
     * 饿汉式--单例设计模式 饿汉式--单例设计模式 true
     */

    Singleton2.java

    package edu.singleton;
    
    /***
     * 把该类设计成单例设计模式(懒汉式:会有线程安全问题)
     */
    public class Singleton2 {
        // 定义一个本类对象并实例化
        private static Singleton2 singleton = null;
    
        // 构造方法私有化
        private Singleton2() {
        };
    
        public static Singleton2 getInstance() {
            if (singleton == null) {
                singleton = new Singleton2();
            }
            return singleton;
        }
    
        public void print() {
            System.out.println("饿汉式--单例设计模式");
        }
    }

    Singleton3.java

    package edu.singleton;
    
    /***
     * 把该类设计成单例设计模式(懒汉式:加线程锁,解决线程安全问题)
     */
    public class Singleton3 {
        // 定义一个本类对象并实例化
        private static Singleton3 singleton = null;
    
        // 构造方法私有化
        private Singleton3() {
        };
    
        public static Singleton3 getInstance() {
            /*
             * 如果第一个线程获取到了单例的实例对象, 后面的线程再获取实例的时候不需要进入同步代码块中了
             */
            // 同步代码块用的锁是单例的字节码文件对象,且只能用这个锁
            if (singleton == null) {
                synchronized (Singleton3.class) {
                    singleton = new Singleton3();
                }
            }
            return singleton;
        }
    
        public void print() {
            System.out.println("饿汉式--单例设计模式");
        }
    }

  • 相关阅读:
    vue中的watch
    css渲染层次理解及实际问题
    css中一些设计总结
    python打包文件(nuitka)
    vue实现前后端文件的上传和下载
    pyqt5使用多线程避免程序假死
    使用python编写shell脚本并运行
    记录一下WordNet多线程下的bug
    利用多线程对大数组进行处理
    nginx配置静态文件
  • 原文地址:https://www.cnblogs.com/jianfengyun/p/3730202.html
Copyright © 2011-2022 走看看