#30天专注成长计划#day13 java 并发多线程设计模式-单例模式

设计模式大致可以分为三个方面的应用

1.架构层面的设计模式,比如 mvc ,分层(http 分层)

2.代码层面的设计模式,提炼系统中的组件,比如:23种设计模式

3.代码模式:低层次直接代码相关。

1.什么是单例模式?

如果在整个系统中有一个类,该类只允许有一个实例存在,接可以使用单例模式来满足要求,即使使用多个 new 来创建对象,得到的都是同一个实例。

单例模式常见的实现有两种,一种是饱汉模式,一种是饿汉模式。

2.饱汉模式


#30天专注成长计划#day13 java 并发多线程设计模式-单例模式_第1张图片

这里使用一个私有的构造函数,是为了避免其他的类可以调用该构造方法创建多个实例。对外提供的只有getInstance() ,调用这个方法才能保证创建的

实例是唯一的。

因为该类的实例被创建是在该类被第一访问的时候创建,也就是说,当我类的成员变量first 的时候,其实我并不想创建实例,但是jvm 也会创建该

类的实例,所有这里有个缺点就是可能造成资源的浪费。

测试代码如下:


#30天专注成长计划#day13 java 并发多线程设计模式-单例模式_第2张图片

缺点:造成资源的浪费

3.饿模式: 只有调用getInstance() 方法才会创建实例


#30天专注成长计划#day13 java 并发多线程设计模式-单例模式_第3张图片

此种方式比饱汉模式更进了一步,他只会在调用getInstance()方法的时候,才会创建实例,当单独调用first 变量的时候,也不会生成实例对象。

测试如下:

#30天专注成长计划#day13 java 并发多线程设计模式-单例模式_第4张图片

缺点:为了保证线程的安全使用synchronized 我们都知道当有大量高并发的时候,synchronized 是很耗费性能的,线程是阻塞的。

天底下总有一些完美的事情是真是存在的,只是有时候你没有遇到,所以当别人说出来的时候,你居然不相信》那么有没有一种方式实现的单例,即是线程安全的,优势性能优的?完美的高富帅有没有?有的的。慢慢的往下看。


#30天专注成长计划#day13 java 并发多线程设计模式-单例模式_第5张图片

这里把synchronized 同步的方法给去掉了,使用一个私有的静态内部类创建该类的实例,其他类不可访问。当量的高并发线程访问的时候,只需要返回他的实例就可以了,这样效率也提升了,(没有同步了),只有在首次调用的时候才会创建实例(按需使用)。访问其他的变量例如 first 不会受影响。


你可能感兴趣的:(#30天专注成长计划#day13 java 并发多线程设计模式-单例模式)