• 单例模式


    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("饿汉式--单例设计模式");
        }
    }

  • 相关阅读:
    Sametime SDK
    final,finally和 finalize的区别
    静态工厂方法
    LinkedTransferQueue原理
    SynchronousQueue和LinkedBlockingQueue区别
    SynchronousQueue中TransferStack原理详解
    SynchronousQueue中TransferQueue原理详解
    jdk Queue
    netty NioEventLoopGroup 分析
    Netty Server 启动时序图
  • 原文地址:https://www.cnblogs.com/jianfengyun/p/3730202.html
Copyright © 2020-2023  润新知