静态内部类实现单例模式
java
it书童
2020-12-26 20:14:14
0赞
0踩
92阅读
0评论
public class StaticInnerClassSingleton {
private StaticInnerClassSingleton() {
}
private static class InnerClass {
private static final StaticInnerClassSingleton staticInnerClassSingleton = new StaticInnerClassSingleton();
}
public static StaticInnerClassSingleton getInstance() {
return InnerClass.staticInnerClassSingleton;
}
}
这种方式的优点是:
-
不用 synchronized,节省时间
-
调用 getInstance() 的时候才会创建对象,不调用不创建,节省空间
为什么这种方式是线程安全的?
虚拟机会保证一个类的 clinit() 方法在多线程环境中被正确的加锁、同步,如果多个线程同时去初始化一个类,那么只有一个线程去执行这个类的 clinit() 方法,其他线程都需要阻塞等待,直到活动线程执行 clinit() 方法执行完毕。如果在一个类的 clinit() 方法中有耗时很长的操作,就可能导致多个线程阻塞
详细可参考 https://www.jianshu.com/p/ef263cf7f7f9
- 上一篇: Double check 双重检查实现单例模式
- 下一篇: 饿汉式创建单例模式

关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
转载须注明出处:https://www.itshutong.com/articles/1010
精品付费
这一次,真正掌握composer
1509
0
个人开发者通过payjs接入微信支付
2583
0
相关推荐
Java 请求转发与重定向
150
0
java ServletContext 对象详解
177
0
Java 的 Scanner 对象
186
0
Java ArrayList 详解
218
0
java 通过工厂模式解耦
170
0
spring DI 依赖注入
180
0
Java 基于子类实现动态代理
156
0
负载均衡Ribbon
188
0
java通过实现Runnable接口创建线程类
130
0
java线程池介绍
101
0
java使用ForkJoinPool利用多CPU
126
0
centos 安装 jdk
67
0