转自:http://blog.csdn.net/withiter/article/details/8140338

今天中午闲着没事,就随便写点关于Java单例模式的。其实单例模式实现有很多方法,这里我将对这些方法进行对比分析:

第一种:

  1. public class Singleton2 {
  2. private Singleton2(){
  3. System.out.println("This is Singleton2's instance.");
  4. };
  5. private static Singleton2 instance = null;
  6. public static Singleton2 getInstance(){
  7. if(instance == null) {
  8. instance = new Singleton2();
  9. }
  10. return instance;
  11. }
  12. }

这种情况未加锁,可能会产生数据错误,比如两个同时新生成的对象,一个把对象数据改变了,而另一个使用的没改变之前的。

第二种:

  1. public class Singleton1 {
  2. private Singleton1(){
  3. System.out.println("This is Singleton1's instance.");
  4. }
  5. private static Singleton1 instance = null;
  6. public static Singleton1 getInstance2() {
  7. if(instance == null){   //1
  8. synchronized (Singleton1.class) {  //2
  9. if(instance == null) {
  10. instance = new Singleton1();
  11. }
  12. }
  13. }
  14. return instance;
  15. }
  16. }

这种只会在第一次的时候产生阻塞,之后每实例一次对象,就会在第1步时跳过去,在第一次实例的时候,会在第2步那里产生阻塞,以后就不会了,这种相对来说是最好的。

第三种:

  1. public class Singleton1 {
  2. private Singleton1(){
  3. System.out.println("This is Singleton1's instance.");
  4. }
  5. private static Singleton1 instance = null;
  6. public static synchronized Singleton1 getInstance(){  //1
  7. if(instance == null){
  8. instance = new Singleton1();
  9. }
  10. return instance;
  11. }
  12. }

多线程的时候每次都会在1这里产生阻塞。

最新文章

  1. FujiXerox CP116w换无线路由器后重新连接
  2. ftplib模块
  3. 实现multbandblend
  4. 论文阅读之 A Convex Optimization Framework for Active Learning
  5. java中的 json 处理包
  6. jmeter接口自动化,你敢想,我敢玩
  7. 二叉树的基本操作(C)
  8. FreeBSD方式安装 MAC OSX
  9. 浅谈负载均衡之【tomcat分布式session共享】
  10. MAX资源跟踪器
  11. C#用注册表开机自动启动某某软件
  12. WEB服务器1--开篇
  13. IOS7 UITableView一行滑动删除后 被删除行的下一行的点击事件将被忽略解决办法
  14. 模板引擎(smarty)知识点总结
  15. Java面向对象特征之封装
  16. Java的selenium代码随笔(1)
  17. 入侵感知系列之webshell检测思路
  18. P1044-栈-洛谷luogu
  19. LCA 模板
  20. Qt实现 QQ好友列表QToolBox

热门文章

  1. tinker
  2. 【BZOJ4517】[Sdoi2016]排列计数 组合数+错排
  3. CSS 垂直外边距合并:规范、延伸、原理、解决办法
  4. git--简单操作
  5. ZOJ 3605 Find the Marble(dp)
  6. Android 满屏显示自定义的View,并进行移动
  7. Netty 应用程序的一个一般准则:尽可能的重用 EventLoop,以减少线程创建所带来的开销。
  8. flask中current_app._get_current_object()与current_app有什么区别?
  9. arcgis server/portal 日志格式化脚本
  10. LeetCode_Search Insert Position