单例设计模式
单例设计模式
所谓单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例
记忆技巧:懒汉式—太懒了,什么时候用,什么时候造
饿汉式—太饿了,上来直接造好
1.饿汉式
package com.danli;public class Singleton01 { public static void main(String[] args) { Bank bank = Bank.getBank(); Bank bank1 = Bank.getBank(); System.out.println(bank==bank1); }}class Bank{ //1.私有化类的构造器(禁止其它类调用) private Bank() { } //2.内部创建类的对象(必须是静态的) private static Bank bank = new Bank(); //3.提供公共的静态方法,返回类的对象 public static Bank getBank() { return bank; }}
2.懒汉式
下面这种方法的线程是不安全的
package com.danli;public class Singleton02 { public static void main(String[] args) { Supermarket supermarket = Supermarket.getSupermarket(); Supermarket supermarket1 = Supermarket.getSupermarket(); System.out.println(supermarket==supermarket1); }}class Supermarket{ //1.私有化类的构造器 private Supermarket() { } //2.声明当前类对象,不初始化(静态的) private static Supermarket supermarket = null; //3.声明public,static的返回当前类对象的方法 public static Supermarket getSupermarket() { if (supermarket==null){ supermarket = new Supermarket(); } return supermarket; }}
以下,在getSupermarket方法上加上同步,此时线程是安全的
package com.danli;public class Singleton02 { public static void main(String[] args) { Supermarket supermarket = Supermarket.getSupermarket(); Supermarket supermarket1 = Supermarket.getSupermarket(); System.out.println(supermarket==supermarket1); }}class Supermarket{ //1.私有化类的构造器 private Supermarket() { } //2.声明当前类对象,不初始化(静态的) private static Supermarket supermarket = null; //3.声明public,static的返回当前类对象的方法 public static synchronized Supermarket getSupermarket() { if (supermarket==null){ supermarket = new Supermarket(); } return supermarket; }}
3.两者的对比
饿汉式:对象加载时间过长,线程是安全的
懒汉式:延迟对象的创建,线程不安全(第一种写法)
开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系