单例模式是一种常见的设计模式,因为自己是初学者,所以只写最简单的饿汉式与懒汉式!
一、懒汉式:
class Bank { private Bank() { } private static Bank instance = null; public static Bank getInstance() { if (instance == null) { Bank instance = new Bank(); } return instance; } }
以上的懒汉式单例模式没有实现线程安全,下面将使用同步机制,将此单例模式改写为线程安全的
class Bank { private Bank() { } private static Bank instance = null; public static Bank getInstance() { // 方式一:效率稍差 // synchronized (Bank.class) { // if(instance == null){ // instance = new Bank(); // } // return instance; // } //方式二: if (instance == null) { synchronized (Bank.class) { if (instance == null) { instance = new Bank(); } } } return instance; } }
二、饿汉式:
class Order { private Order() { } private static Order instance = new Order(); public static Order getInstance() { return instance; } }
饿汉式的单例模式天生便是线程安全的。
三、懒汉式与饿汉式的区别:
①线程安全方面:
饿汉式的单例模式天生就是线程安全的,而懒汉式的设计模式是非线程安全的,可以使用同步机制实现线程安全。
②资源占用方面:
顾名思义,饿汉式的单例模式在类创建的同时就已经实例化了一个静态对象出来,而懒汉式的单例模式在使用该单例模式时才会实例化静态对象。
所以饿汉式无论在之后会不会使用到这个单例,都会占用一定的内存,而懒汉式只有当使用到这个单例的时候才会占用内存。
第一次写博客,本博客的主要目的是作为笔记,方便自己的日后查阅,如果有不妥之处请多多指正~~
远风,一个正在努力的年轻人。