Java 单例模式原理_Java设计模式单例模式原理解读

单例模式:

定义是单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。

场景:比如创建连接池的时候,显而易见,连接池在这一个项目中只能存在一个,那么我们去创建它的时候就必须保证任何时候项目中只存在这一个连接池。那么我们什么时候去创建这个池子呢?继而产生两种思路去创建这个池子,第一种就是在我们想要使用连接池的时候去创建它,我们称之为懒汉式,还有一种就是在初始化的时候我们就已经创建好这个连接池了,我们称之为饿汉式。下面分别用两个小demo练习一下这两种方法。

懒汉式:

基本代码:

public class singleton{

private static Singleton singleton = null ;

public static Singleton getInstance(){

if (singleton == null ){

singeleton = new Singleton();

}

return singeleton;

}

}

为了解决线程安全问题

1、同步机制

public class singleton{

private static Singleton singleton = null ;

public static synchronized Singleton getInstance(){

if (singleton == null ){

singeleton = new Singleton();

}

return singeleton;

}

}

2、双重检查锁定

public class singleton{

private static Singleton singleton = null ;

public static Singleton getInstance() {

if (singleton == null) {

synchronized (Singleton.class) {

if (singleton == null) {

singleton = new Singleton();

}

}

}

return singleton;

}

}

3、静态内部类

public class Singleton {

private static class LazyHolder {

private static final Singleton INSTANCE = new Singleton();

}

private Singleton (){}

public static final Singleton getInstance() {

return LazyHolder.INSTANCE;

}

}

饿汉式:

public class singleton{

private static Singleton singleton = new Singleton();

public static Singleton getInstance() {

return singleton;

}

}

饿汉式和懒汉式区别:

饿汉式是类初始化的时候就已经new出singleton这个实例,保证在调用getInstance方法的时候,实例已经存在,本身就是线程安全的。

懒汉式时只在调用getInstance方法的时候才会去创建第一个实例,下次再次调用的时候就不用去创建实例了。

懒汉式需要考虑线程安全问题,可以用上面三种方式解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值