java单例模式之懒汉式分析
2024-08-28 23:01:37
转自:http://blog.csdn.net/withiter/article/details/8140338
今天中午闲着没事,就随便写点关于Java单例模式的。其实单例模式实现有很多方法,这里我将对这些方法进行对比分析:
第一种:
- public class Singleton2 {
- private Singleton2(){
- System.out.println("This is Singleton2's instance.");
- };
- private static Singleton2 instance = null;
- public static Singleton2 getInstance(){
- if(instance == null) {
- instance = new Singleton2();
- }
- return instance;
- }
- }
这种情况未加锁,可能会产生数据错误,比如两个同时新生成的对象,一个把对象数据改变了,而另一个使用的没改变之前的。
第二种:
- public class Singleton1 {
- private Singleton1(){
- System.out.println("This is Singleton1's instance.");
- }
- private static Singleton1 instance = null;
- public static Singleton1 getInstance2() {
- if(instance == null){ //1
- synchronized (Singleton1.class) { //2
- if(instance == null) {
- instance = new Singleton1();
- }
- }
- }
- return instance;
- }
- }
这种只会在第一次的时候产生阻塞,之后每实例一次对象,就会在第1步时跳过去,在第一次实例的时候,会在第2步那里产生阻塞,以后就不会了,这种相对来说是最好的。
第三种:
- public class Singleton1 {
- private Singleton1(){
- System.out.println("This is Singleton1's instance.");
- }
- private static Singleton1 instance = null;
- public static synchronized Singleton1 getInstance(){ //1
- if(instance == null){
- instance = new Singleton1();
- }
- return instance;
- }
- }
多线程的时候每次都会在1这里产生阻塞。
最新文章
- FujiXerox CP116w换无线路由器后重新连接
- ftplib模块
- 实现multbandblend
- 论文阅读之 A Convex Optimization Framework for Active Learning
- java中的 json 处理包
- jmeter接口自动化,你敢想,我敢玩
- 二叉树的基本操作(C)
- FreeBSD方式安装 MAC OSX
- 浅谈负载均衡之【tomcat分布式session共享】
- MAX资源跟踪器
- C#用注册表开机自动启动某某软件
- WEB服务器1--开篇
- IOS7 UITableView一行滑动删除后 被删除行的下一行的点击事件将被忽略解决办法
- 模板引擎(smarty)知识点总结
- Java面向对象特征之封装
- Java的selenium代码随笔(1)
- 入侵感知系列之webshell检测思路
- P1044-栈-洛谷luogu
- LCA 模板
- Qt实现 QQ好友列表QToolBox
热门文章
- tinker
- 【BZOJ4517】[Sdoi2016]排列计数 组合数+错排
- CSS 垂直外边距合并:规范、延伸、原理、解决办法
- git--简单操作
- ZOJ 3605 Find the Marble(dp)
- Android 满屏显示自定义的View,并进行移动
- Netty 应用程序的一个一般准则:尽可能的重用 EventLoop,以减少线程创建所带来的开销。
- flask中current_app._get_current_object()与current_app有什么区别?
- arcgis server/portal 日志格式化脚本
- LeetCode_Search Insert Position