`
zhb8015
  • 浏览: 378379 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
Spring Roo杂谈
浏览量:0
社区版块
存档分类
最新评论

Singleton多线程实现

阅读更多

一.单件模式一般实现
二.单件模式多线程实现


一.单件模式一般实现

public class Singleton {
	private static Singleton uniqueInstance;

	private Singleton() {}

	public static Singleton getInstance() {
		if (uniqueInstance == null) {
			uniqueInstance = new Singleton();
		}
		return uniqueInstance;
	}
}



二.单件模式多线程实现

 

public class Singleton {
	private static Singleton uniqueInstance;

	private Singleton() {}

	public synchronized static Singleton getInstance() {
		if (uniqueInstance == null) {
			uniqueInstance = new Singleton();
		}
		return uniqueInstance;
	}
}

 问题:性能降低

 

A. 如何getInstance()的性能对应用程序不是关键,就什么都不要做.同步可能使应用程序的执行效率降低100倍,但如果此方法不是被频繁的调用,则不用修改.因为同步的getInstance()方法既简单又有效.

B.使用"急切"创建实例,而不用延迟化的实例的方法

public class Singleton {
	private static Singleton uniqueInstance = new Singleton();

	public synchronized Singleton getInstance() {
		return uniqueInstance;
	}
}

 C.使用"双重检查加锁",尽量减少使用同步:如果性能是你关心的,此方法可大大减少时间消耗

 

public class Singleton {
	private static volatile Singleton uniqueInstance;

	public static Singleton getInstance() {
		if (uniqueInstance == null) {
			synchronized (Singleton.class) {
				if (uniqueInstance == null) {
					uniqueInstance = new Singleton();
				}
			}
		}
		return uniqueInstance;
	}
}

 

 

分享到:
评论

相关推荐

    C++中多线程与Singleton的那些事儿

    前言  前段时间在网上看到了个的面试题,大概...本文主要将从基本的单线程中的Singleton开始,慢慢讲述多线程与Singleton的那些事。  单线程  在单线程下,下面这个是常见的写法: template class Singleton

    .Net 多线程详解

    .doc 格式 详细解析多线程技术 基础篇 • 怎样创建一个线程 • 受托管的线程与 Windows线程 • 前台线程与后台线程 • 名为BeginXXX和EndXXX的方法是做什么用的 • 异步和多线程有什么关联 WinForm多线程编程...

    权威.NET多线程详解(源码示例)

    • 我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决? • Invoke,BeginInvoke干什么用的,内部是怎么实现的 • 每个线程都有消息队列吗? • 为什么Winform不允许跨线程修改UI线程控件的值 ...

    C++CLI中实现singleton模式

    双重检测锁(Double-Checked Locking)实现的Singleton模式在多线程应用中有相当的价值。在ACE的实现中就大量使用ACE_Singleton模板类将普通类转换成具有Singleton行为的类。这种方式很好地消除了一些重复代码臭味,...

    .net 线程详解 基础篇

    * 异步和多线程有什么关联 WinForm多线程编程篇 * 我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决? * Invoke,BeginInvoke干什么用的,内部是怎么实现的 * 每个线程都有消息队列吗? *...

    objc-singleton:如何实现安全的 Objective-C 单例

    多线程安全 使用安全,即通过new类方法、init方法仍然返回的是同一个单例对象。new/init方法不做处理用户是可以调用的。 第二点在场景上看起来有些吹毛求疵,用户可以粘贴示例代码或是看一下文档可以做到通过工厂...

    Singleton模式源程序

    感谢李建忠老师,这里仅是源程序,还包括多线程的实现。

    Python实现Singleton模式的方式详解

    本文将介绍常见的实现单例模式的几种方式,这里暂不考虑多线程的情况。 为了准备该篇博文,之前写了几篇相关的文章依次完整的介绍了相关的概念,下面会在需要的时候给出链接。 装饰器作为python实现单例模式的一种...

    Linux多线程服务端编程:使用muduo C++网络库

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第二阶段02讲、介绍四种Singleton方式的优缺点在多线程情况下.wmv │ 高并发编程第二阶段03讲、介绍三种高效优雅的Singleton实现方式.wmv │ 高并发编程第二阶段04讲、多线程的休息室WaitSet详细...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第二阶段02讲、介绍四种Singleton方式的优缺点在多线程情况下.wmv │ 高并发编程第二阶段03讲、介绍三种高效优雅的Singleton实现方式.wmv │ 高并发编程第二阶段04讲、多线程的休息室WaitSet详细...

    Java岗位常规面试题.pdf

    1. Java中的多态(Polymorphism)是什么?请举例说明多态的应用场景。...9. 请解释Java中的Synchronized关键字的作用及其在多线程编程中的应用。 10. Java中的什么机制实现了面向对象编程(Object-

    设计模式,软件开发者必读

    2.1.2 多线程安全的SINGLETON类 12 2.1.3 双重锁定SINGLETON 13 2.1.4 静态初始化SINGLETON 13 2.1.5 SINGLETON的子类化问题 14 2.1.6 SINGLETON销毁 15 2.1.7 SINGLETON模式扩展 16 2.2 FACTORY METHOD工厂方法模式...

    MFC简单文本编辑器(单进、线程,多窗口)

    我们看到对于一个类,我们可以用Singleton 的设计模式来保证唯一性,那么对于更复杂一些的概念呢,例如一个程序? 我们举简单的文字编辑为例:如果我们要写一个新的纯文本编辑器 myEditor.exe (编辑文本文件,或源...

    常见设计模式—单例模式(Singleton)

    单例模式(Singleton Pattern)是设计模式中最简单的模式之一,属于创建型模式。这种设计模式主要是类的对象只有一个实例,不需要每次new 创造。而我们要做的的就是确保这个对象创建的唯一。然后根据一些特征进行...

    二十三种设计模式【PDF版】

    设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. ...

    使用设计模式中的单例模式来实现C++的boost库

    需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread safety。 使用double-check来保证thread safety。但是如果处理大量数据时,该锁才成为严重的性能瓶颈。 1、...

    design-pattern

    可以引出C ++ 11后的多线程内存模型,除了用局部静态变量还可以用获取和释放栅栏,顺序一致的原子操作等无锁方式实现,以及愚蠢的如何在工业实践中实现Singleton来管理多个Singletons),从而为引导梳理所学的知识。...

    使用SMPP发送短信

    本文档详细描述了如何使用SMPP协议发送实时短信和定时短信,文档中包含详细设计、...这块功能使用了JAVA多种设计模式如:Factory、FlyWeight、Singleton等等,同时也使用了多线程、连接池等技术,值得大家借鉴和学习。

    轻量级、易用、快速的日志库,仅提供日志写入前端 C++源代码

    多个线程间的日志不穿插干扰. 日志线程不能干扰主程序的运行逻辑. 易读性 每条日志记录占用一行空间,便于 awk 等工具的时候方便查找, 查看教程. 日志信息包含必要的信息,包括日期时间、线程id、日志等级、日志发生...

Global site tag (gtag.js) - Google Analytics