当前位置:网站首页>并发模式之单例和不变模式
并发模式之单例和不变模式
2022-07-29 02:19:00 【程序猫大刚】
单例模式
单例模式是为了确保系统中某个类只存在一个实例。
在多种写法中,推荐使用静态内部类方式,利用类加载一次特性确保只有一个实例(线程安全),
同时具备无锁和懒创建优点。
示例:
public class StaticInnerClassSingleton {
// 私有化构造方法
private StaticInnerClassSingleton(){}
// 内部类
static class Holder{
static StaticInnerClassSingleton INSTANCE = new StaticInnerClassSingleton();
}
// 获取实例对象
public static StaticInnerClassSingleton getInstance(){
return Holder.INSTANCE;
}
public static void main(String[] args) {
for(int i=0;i<10;i++){
new Thread(()->{
System.out.println(StaticInnerClassSingleton.getInstance());
}).start();
}
}
}
不变模式
在并发场景中,不变对象是不需要同步操作的。(因为对象不会改变,所以多个线程访问不会出现不一致问题)
特征:
- class被修饰为final
- 属性是私有且被final修饰的
JDK中所有的元数据类、包装类都是使用不变模式实现的。
java.lang.String
java.lang.Boolean
java.lang.Byte
java.lang.Character
java.lang.Double
java.lang.Float
java.lang.Integer
java.lang.Long
java.lang.Short
例子:
public final class FinalCat {// final 确保无子类
private final String name;// final 确保属性
private final Integer age;
public FinalCat(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
@Override
public String toString() {
return "FinalCat{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public static void main(String[] args) {
FinalCat cat = new FinalCat("皮侃子", 4);
System.out.println(cat);
}
}
边栏推荐
- 自动分账系统哪家好?
- JMeter's BeanShell generates MD5 encrypted data and writes it to the database
- 第九天笔记
- In depth analysis - Pretreatment
- 《微信小程序-进阶篇》Lin-ui组件库源码分析-Button组件(二)
- Three implementation methods of Servlet
- 6 years of testing experience, teaching you how to test ~ how to control the project
- 【无标题】
- C语言实现三子棋游戏
- 九宫格心形拼图小程序源码/带流量主微信小程序源码
猜你喜欢
etcd实现大规模服务治理应用实战
JMeter's BeanShell generates MD5 encrypted data and writes it to the database
第八天笔记
php 进程通信系列 (一) 命名管道
Cloud development pocket toolbox wechat applet source code
How to migrate thinkphp5 projects to Alibaba cloud function computing to cope with traffic peaks?
C语言:判断字母
Youxuan software appoints Huang Zhijun as the general manager of the company
Three implementation methods of Servlet
Rocbos open source micro community light forum source code
随机推荐
PHP幸运抽奖系统带后台源码
Explanation of engineering economics terms
Understanding service governance in distributed development
QT屏幕自适应自动布局,拖动窗口自动变大变小(一)
Polygon zkEVM——Hermez 2.0简介
Library management system
Brief answer of Engineering Economics
Flink生产环境经典问题汇总
白马过隙的时光
QT screen adaptive automatic layout, drag the window to automatically grow larger and smaller (I)
golang 协程的实现原理
HTTP breakpoint resume and cache problems
[error reporting] node:internal/modules/cjs/loader:936 [solution]
JMeter's BeanShell generates MD5 encrypted data and writes it to the database
Tesla neural network model hydranet
C语言实现三子棋游戏
Redis队列实现秒杀
MySQL和Redis的双写一致性
Ordinary happiness
Continuous learning / life long learning