线程安全的单例模式
2015-10-16 10:29
316 查看
单例模式是一种比较简单的模式,确保某一个类在内存中只有一个实例,而且自行实例化并向整个系统提供这个实例,也就是说在这个系统中这个类只能实例化一个对象。比如web页面的计数器。
线程安全的单例模式
使用synchronized关键字使得线程安全,这样写会使得程序的执行效率变低,因为每一次获取实例时候都会判断是否有锁然后加锁~
线程安全的单例模式
/* 这是先初始化对象,称为饿汉式 Single类一进内存,就已经生成对象 线程安全的 */ class Single { private static Single single=new Single(); private Single() { } public static Single getInstance() { return single; } public void doSomething() { } }线程不安全的单例模式
/* 这是延迟加载对象,称为懒汉式 Single类进内存,对象还没有存在,只是调用getInstance()方法时候才建立对象。 线程不安全的 */ class Single { private static Single single=null; private Single() { } public static Single getInstance() { if(single==null) { single=new Single(); } return single; } public void doSomething() { } }
使用synchronized关键字使得线程安全,这样写会使得程序的执行效率变低,因为每一次获取实例时候都会判断是否有锁然后加锁~
class Single { private static Single single=null; private Single() { } //synchronized关键字用于线程同步,加锁 public static Single synchronized getInstance() { if(single==null) { single=new Single(); } return single; } public void doSomething() { } }使用两次判断,避免每次getInstance()方法加锁,所消耗的资源。
class Single { private static Single single=null; private Single() { } //synchronized关键字用于线程同步 public static Single getInstance() { if(single==null) { synchronized(Single.class) { if(single==null) { single=new Single(); } } } return single; } public void doSomething() { } }
相关文章推荐
- 死锁
- android Application Project目录结构
- Cocos2d中update与fixedUpdate的区别(六)
- Cocos2d中update与fixedUpdate的区别(六)
- Cocos2d中update与fixedUpdate的区别(六)
- git与github区别与简介
- iOS 单例模式 + NSUserDefaults
- 查询当前用户下所有的表机构
- SQL SERVER 批量插入记录
- 关于客户dns解析到比较远的节点分析
- 雪*C语言核心知识总结四
- java 插入oracle中clob字段
- 加快R运行的简易方法-预分配内存
- HighchartsJS创建点状带标识的图表实例
- DynamicJson
- 关于websocket 在生产环境中遇到的问题 及 解决办法
- SQL SERVER 批量插入记录
- python框架(flask/django/tornado)比较
- 14个Xcode中常用的快捷键操作
- Permutations 解答