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

  • 相关阅读:
    nyoj 题目19 擅长排列的小明
    nyoj 题目20 吝啬的国度
    nyoj 题目17 单调递增最长子序列
    nyoj 题目14 会场安排问题
    nyoj 题目12 喷水装置(二)
    nyoj 题目7 街区最短路径问题
    nyoj 8 一种排序
    nyoj 题目6 喷水装置
    nyoj 题目5 Binary String Matching
    nyoj 1282 部分和问题
  • 原文地址:https://www.cnblogs.com/jianfengyun/p/3730202.html
Copyright © 2011-2022 走看看