`
zhb8015
  • 浏览: 390862 次
  • 性别: 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;
	}
}

 

 

分享到:
评论

相关推荐

    singleton设计模式java实现及对比

    并且由于实例在类加载时就创建,所以不存在多线程下的性能问题。 缺点:Singleton实例在类加载时就被创建,即使可能永远都不会用到,造成了内存浪费。 ### 2. 懒汉式(Synchronized Method) 这种方式是在`...

    多线程下的singleton

    标题中的“多线程下的Singleton”指的是在编程中如何在多线程环境下正确实现单例模式。单例模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。在多线程环境中,如果不妥善处理,可能会导致多个...

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

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

    C++完美实现Singleton模式

    在多线程环境中,上述实现可能会导致竞态条件,即多个线程可能同时尝试创建Singleton对象。为了解决这一问题,可以采用双重检查锁定(Double-Checked Locking)模式来确保线程安全性: ```cpp class Singleton { ...

    单例模式下,使用多线程实现

    1. **双重检查锁定(Double-Check Locking)**:这是在多线程环境下实现线程安全单例的常用方法。代码中,首先进行一次实例的检查,如果实例不存在,才进行同步块内的创建。这样可以减少不必要的同步开销,提高效率...

    C++类中创建多线程实现本地和远程打印

    在C++编程中,创建多线程是一种常见的方式,用于实现并发执行多个任务,比如这里的本地和远程打印。本示例中的代码可能涉及到以下几个关键知识点: 1. **多线程**:C++11及更高版本引入了`std::thread`库来支持线程...

    Java多线程编程环境中单例模式的实现

    ### Java多线程编程环境中单例模式的实现 #### 概述 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在Java中,单例模式的应用非常广泛,特别是在资源管理、日志记录、...

    C++ 实现的singleton 模式

    在多线程环境中,如果没有适当的同步机制,`getInstance()`可能会在不同线程中同时创建多个实例。在C++11及更高版本中,我们可以使用`std::call_once`和`std::once_flag`来确保实例只在第一次调用时创建: ```cpp #...

    .Net 多线程详解

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

    单例实现源码singleton-C++

    总结来说,C++中的单例模式实现多种多样,选择哪种方式取决于具体的应用场景,如是否考虑多线程、内存占用、初始化时机等。通过理解这些实现方式,我们可以更好地设计和使用单例模式,以满足软件的高效、稳定和灵活...

    多线程单例模式并发访问

    总结起来,多线程环境下的单例模式实现需要注意线程安全问题,尤其是懒汉式单例,需要采取适当的同步措施来防止多线程环境下的实例化问题。此外,对于不同场景的需求,可以选择不同的实现方式来优化性能和资源使用。

    Singleton模式源程序

    在给定的文件"Singleton"中,可能包含了以上所述的Singleton模式的实现代码,以及如何在多线程环境下保证其正确性的示例。通过分析和学习这段代码,我们可以更深入地理解Singleton模式的实现细节和在并发环境中的...

    多线程服务器的几种常用模型

    在多线程环境中实现Singleton时需要注意线程安全性。 一种简单的线程安全Singleton实现方法是使用双重检查锁定(double-checked locking)技术: ```cpp class Singleton { private: static Singleton* instance; ...

    .NET多线程详解及源码

    .NET框架中的多线程是构建高性能、响应迅速的应用程序的关键技术。本文将深入探讨.NET多线程的基础知识、WinForm多线程编程、线程池的使用以及同步机制,同时涉及Web和IIS中线程的运用。 1. **基础篇 - 创建线程** ...

    .NET多线程详解

    - **Singleton的双锁实现**:双锁(double-checked locking)模式用于确保单例的安全创建,但可能存在并发问题,因此在多线程环境下应谨慎使用。 ### Web和IIS - **应用程序池**、**WebApplication**和线程池的关系...

    C# 多线程讲解的基础概念

    C# 多线程讲解的基础概念 多线程开发的基础知识点包括:创建线程、线程池、同步和异步、WinForm 多线程编程、线程安全、锁定机制等。 一、创建线程 创建线程有多种方式,包括使用 Thread 类、Delegate....

    Singleton

    此外,Singleton模式虽然简单易用,但也有一些缺点,如违背了开闭原则(对扩展开放,对修改关闭),导致程序难以进行单元测试,以及在某些多线程环境下可能引发性能问题。在设计时需权衡其适用性。

    Java并行(4):线程安全前传之Singleton1

    在多线程环境中,实现线程安全的Singleton至关重要,因为不正确的实现可能导致多个实例的创建,违背了Singleton的基本原则。 1. 寂寞的Singleton Singleton通常采用静态内部类、枚举或懒汉式(Lazy Initialization...

    单例模式(Singleton)的6种实现

    但这种方式在多线程环境下会有问题,因为多个线程可能会同时创建多个实例。 ```java public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton ...

Global site tag (gtag.js) - Google Analytics