Java并发程序设计(八)设计模式与并发之单例模式
设计模式与并发之单例模式
简单的单例实现;
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并发程序设计(八)设计模式与并发之单例模式相关推荐
- Java并发程序设计(十一)设计模式与并发之生产者-消费者模式
设计模式与并发之生产者-消费者模式 生产者-消费者模式是一个经典的多线程设计模式.它为多线程间的协作提供了良好的解决方案. 在生产者-消费者模式中,通常由两类线程,即若干个生产者线程和若干个消费者线程 ...
- Java进阶专题(八) 设计模式之适配器模式、装饰者模式、观察者模式
本章节将介绍:三个设计模式,适配器模式.装饰者模式和观察者模式.通过学习适配器模式,可以优雅的解决代码功能的兼容问题.另外有重构需求的人群一定需要掌握装饰者模式.本章节参考资料书籍<Spring ...
- java 消费者模式 多线程_[Java并发-24-并发设计模式] 生产者-消费者模式,并发提高效率...
生产者 - 消费者模式在编程领域的应用非常广泛,前面我们曾经提到,Java 线程池本质上就是用生产者 - 消费者模式实现的,所以每当使用线程池的时候,其实就是在应用生产者 - 消费者模式. 当然,除了 ...
- java copy-on-write_[Java并发-18-并发设计模式] COW模式:Copy-on-Write模式的应用领域
在上一篇文章中我们讲到 Java 里 String 这个类在实现 replace() 方法的时候,并没有更改原字符串里面 value[] 数组的内容,而是创建了一个新字符串,这种方法在解决不可变对象的 ...
- Java并发编程-八锁问题带你彻底理解对象锁和类锁
八锁问题带你理解对象锁和类锁 8锁问题演示 1.标准访问 2.在邮件方法中暂停4秒,请问先打印邮件还是短信 3.新增普通sayHello方法,请问先打印邮件还是hello 4.两部手机,请问先打印邮件 ...
- Java并发程序设计(四)JDK并发包之同步控制
JDK并发包之同步控制 一.重入锁 重入锁使用java.util.concurrent.locks.ReentrantLock来实现.示例代码如下: public class TryReentrant ...
- Java并发程序设计(二)Java并行程序基础
Java并行程序基础 一.线程的生命周期 其中blocked和waiting的区别: 作者:赵老师 链接:https://www.zhihu.com/question/27654579/answer/ ...
- 【Java并发】double-checked-locking设计模式
// 创建单例模式(懒汉) class Singleton{private Singleton(){}private static volatile Singleton INSTANCE = null ...
- Java并发(八)——Fork/Join
文章目录 Fork/Join Fork/Join Fork/Join框架是一个实现了ExecutorService接口的多线程处理器,采用了分治的思想,将任务递归分解成更小的任务执行 采用工作窃取算法 ...
最新文章
- 函数图像轻松画:教你用永中图象
- BZOJ 2744: [HEOI2012]朋友圈
- NYOJ 420 P次方求和
- html弹出文本输入框,Windows API 弹出文本框输入的内容
- 使用JMH做Java微基准测试
- BZOJ.4199.[NOI2015]品酒大会(后缀自动机 树形DP)
- Bootstrap——可拖动模态框(Model)
- 基于OEA框架的客户化设计(一) 总体设计
- PEP8 Python 编码规范
- Javascript校验含中文的字符串长度
- Oracle 数据库用户表大小分析
- idea安装插件及java开发插件推荐
- python函数手册pdf_Python3.8.1标准库参考中文手册 PDF 高质量版
- 防红域名生成的3种方法介绍
- eclipse报错 错误: 找不到或无法加载主类
- 现货交易、远期合同交易和期货交易
- OSChina 娱乐弹弹弹——问世间情为何物,直教人生死相许
- 未来云计算虚拟化技术的发展趋势
- 教你如何使用SwipeRefreshLayout来构建一个上拉加载下拉刷新框架
- Jemeter 设置中文
热门文章
- 华为服务器bmc默认地址_智能数据中心和智慧园区:华为的单点突破与全局效应...
- copy所有的java文件到硬盘_将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad...
- python array按行归一化_机器学习 第40集:特征不归一化有什么危害?特征归一化公式是什么?( 含有笔记、代码、注释 )...
- python中扑克牌类设计_Python类的基础设计、使用
- Caused by: org.springframework.amqp.AmqpException: No method found for class [B
- 零拷贝和java NIO
- java高级数据类型_最新精品JAVA高级备课完美版——Java基本数据类型.pdf
- 红帽启动apache服务器_redhat 启动ssh服务器
- java 包权限_Java基础(十二)之包和权限访问
- java application作用域_servlet三大作用域:request,session,application