设计模式与并发之单例模式

简单的单例实现;

public class Singleton {private Singleton(){System.out.println("Creating Singleton");}private static Singleton instance=new Singleton();public static Singleton getInstance(){return instance;}
}

缺点:何时产生实例,不好控制。

延迟加载,需要instance才去创建:

 1 /**
 2  * @author: Tang Jiujia
 3  * @version: 2017/9/18 0018 14:44
 4  */
 5 public class LazySingleton {
 6
 7     private LazySingleton(){
 8         System.out.println("LazySingleton created!");
 9     }
10
11     private static LazySingleton instance=null;
12
13     public static synchronized LazySingleton getInstance(){
14         if(instance==null){
15             return new LazySingleton();
16         }
17         return instance;
18     }
19 }

缺点:并发条件下加锁,影响性能。

利用静态内部类实现单例,客服以上两种方法的缺陷:

 1 /**
 2  * @author: Tang Jiujia
 3  * @version: 2017/9/18 0018 14:53
 4  */
 5 public class StaticSingleton {
 6
 7     private StaticSingleton(){
 8         System.out.println("StaticSingleton created!");
 9     }
10
11     private static class SingletonHolder{
12         private static StaticSingleton instance=new StaticSingleton();
13     }
14
15     public static StaticSingleton getInstance(){
16         return SingletonHolder.instance;
17     }
18 }

转载于:https://www.cnblogs.com/Shadowplay/p/7543077.html

Java并发程序设计(八)设计模式与并发之单例模式相关推荐

  1. Java并发程序设计(十一)设计模式与并发之生产者-消费者模式

    设计模式与并发之生产者-消费者模式 生产者-消费者模式是一个经典的多线程设计模式.它为多线程间的协作提供了良好的解决方案. 在生产者-消费者模式中,通常由两类线程,即若干个生产者线程和若干个消费者线程 ...

  2. Java进阶专题(八) 设计模式之适配器模式、装饰者模式、观察者模式

    本章节将介绍:三个设计模式,适配器模式.装饰者模式和观察者模式.通过学习适配器模式,可以优雅的解决代码功能的兼容问题.另外有重构需求的人群一定需要掌握装饰者模式.本章节参考资料书籍<Spring ...

  3. java 消费者模式 多线程_[Java并发-24-并发设计模式] 生产者-消费者模式,并发提高效率...

    生产者 - 消费者模式在编程领域的应用非常广泛,前面我们曾经提到,Java 线程池本质上就是用生产者 - 消费者模式实现的,所以每当使用线程池的时候,其实就是在应用生产者 - 消费者模式. 当然,除了 ...

  4. java copy-on-write_[Java并发-18-并发设计模式] COW模式:Copy-on-Write模式的应用领域

    在上一篇文章中我们讲到 Java 里 String 这个类在实现 replace() 方法的时候,并没有更改原字符串里面 value[] 数组的内容,而是创建了一个新字符串,这种方法在解决不可变对象的 ...

  5. Java并发编程-八锁问题带你彻底理解对象锁和类锁

    八锁问题带你理解对象锁和类锁 8锁问题演示 1.标准访问 2.在邮件方法中暂停4秒,请问先打印邮件还是短信 3.新增普通sayHello方法,请问先打印邮件还是hello 4.两部手机,请问先打印邮件 ...

  6. Java并发程序设计(四)JDK并发包之同步控制

    JDK并发包之同步控制 一.重入锁 重入锁使用java.util.concurrent.locks.ReentrantLock来实现.示例代码如下: public class TryReentrant ...

  7. Java并发程序设计(二)Java并行程序基础

    Java并行程序基础 一.线程的生命周期 其中blocked和waiting的区别: 作者:赵老师 链接:https://www.zhihu.com/question/27654579/answer/ ...

  8. 【Java并发】double-checked-locking设计模式

    // 创建单例模式(懒汉) class Singleton{private Singleton(){}private static volatile Singleton INSTANCE = null ...

  9. Java并发(八)——Fork/Join

    文章目录 Fork/Join Fork/Join Fork/Join框架是一个实现了ExecutorService接口的多线程处理器,采用了分治的思想,将任务递归分解成更小的任务执行 采用工作窃取算法 ...

最新文章

  1. 函数图像轻松画:教你用永中图象
  2. BZOJ 2744: [HEOI2012]朋友圈
  3. NYOJ 420 P次方求和
  4. html弹出文本输入框,Windows API 弹出文本框输入的内容
  5. 使用JMH做Java微基准测试
  6. BZOJ.4199.[NOI2015]品酒大会(后缀自动机 树形DP)
  7. Bootstrap——可拖动模态框(Model)
  8. 基于OEA框架的客户化设计(一) 总体设计
  9. PEP8 Python 编码规范
  10. Javascript校验含中文的字符串长度
  11. Oracle 数据库用户表大小分析
  12. idea安装插件及java开发插件推荐
  13. python函数手册pdf_Python3.8.1标准库参考中文手册 PDF 高质量版
  14. 防红域名生成的3种方法介绍
  15. eclipse报错 错误: 找不到或无法加载主类
  16. 现货交易、远期合同交易和期货交易
  17. OSChina 娱乐弹弹弹——问世间情为何物,直教人生死相许
  18. 未来云计算虚拟化技术的发展趋势
  19. 教你如何使用SwipeRefreshLayout来构建一个上拉加载下拉刷新框架
  20. Jemeter 设置中文

热门文章

  1. 华为服务器bmc默认地址_智能数据中心和智慧园区:华为的单点突破与全局效应...
  2. copy所有的java文件到硬盘_将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad...
  3. python array按行归一化_机器学习 第40集:特征不归一化有什么危害?特征归一化公式是什么?( 含有笔记、代码、注释 )...
  4. python中扑克牌类设计_Python类的基础设计、使用
  5. Caused by: org.springframework.amqp.AmqpException: No method found for class [B
  6. 零拷贝和java NIO
  7. java高级数据类型_最新精品JAVA高级备课完美版——Java基本数据类型.pdf
  8. 红帽启动apache服务器_redhat 启动ssh服务器
  9. java 包权限_Java基础(十二)之包和权限访问
  10. java application作用域_servlet三大作用域:request,session,application