`

多线程-单例模式

阅读更多
单例模式


一、概念

饿汉模式、懒汉模式

二、示例

package com.study.current.thread.day02;

/**
 * 单例,多线程
 */
public class InnerSingleton {

	private static class Singletion{
		private static Singletion single = new Singletion();
	}
	
	public static Singletion getInstance(){
		return Singletion.single;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}



package com.study.current.thread.day02;

import java.util.DuplicateFormatFlagsException;

public class DoubleCheckDemo {

	private static DoubleCheckDemo dc ;
	
	public static DoubleCheckDemo getDc(){
		if(dc == null){
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			synchronized (DoubleCheckDemo.class) {
				if(dc == null){
					dc = new DoubleCheckDemo();
				}
			}
		}
		return dc ;
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {

		Thread t1 = new Thread(new Runnable() {
			
			public void run() {
				System.out.println(DoubleCheckDemo.getDc().hashCode());
			}
		});
		
		Thread t2 = new Thread(new Runnable() {
			
			public void run() {
				System.out.println(DoubleCheckDemo.getDc().hashCode());
			}
		});
		
		t1.start();
		t2.start();
	}

}




分享到:
评论

相关推荐

    java设计模式----单例模式

    单例模式是其中最常用的一种,它的核心思想是确保一个类只有一个实例,并提供全局访问点。单例模式的应用场景包括:控制资源的访问、管理复杂的初始化过程以及在系统中创建一个全局的配置对象等。 单例模式分为两种...

    OC-单例OC-单例OC-单例OC-单例OC-单例

    5. **线程安全**:为了确保在多线程环境中正确地创建和访问单例,可以在`sharedInstance`方法中添加线程同步代码,如使用GCD的`dispatch_once`或者`@synchronized`关键字。 **使用GCD实现线程安全的单例** ```objc ...

    Swift-单例Swift-单例Swift-单例Swift-单例Swift-单例

    首先,单例模式的主要用途在于控制共享资源,确保在整个应用程序中,对于特定对象的访问是唯一的,避免多个实例间的不一致性和同步问题。这在处理数据库连接、网络请求、偏好设置或全局配置时特别有用。 在Swift中...

    常见设计模式-单例模式

    但是,懒汉类型的单例模式在多线程情况下可能会出现问题,因为多个线程可能同时判断对象为空,并创建多个对象。为了解决这个问题,可以使用 synchronized 关键字来确保线程安全,例如: ```java class Singleton3 {...

    设计模式-单例模式

    这是最简单的一种实现方式,它在类加载时就完成了实例化,避免了多线程同步问题。 ```java public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} ...

    设计模式ForiOS-02-单例模式.pdf

    - 在多线程环境中,正确实现单例的线程安全非常重要。 总的来说,单例模式在iOS开发中扮演着重要角色,合理使用能有效管理和共享资源,提高代码的复用性和效率。但同时,也需要注意它可能带来的问题,比如测试困难...

    一例读懂设计模式-单例模式、简单工厂模式.zip

    本资源“一例读懂设计模式-单例模式、简单工厂模式.zip”旨在帮助初学者通过实例深入理解这两种重要设计模式:单例模式和简单工厂模式。以下是关于这两个模式的详细讲解。 1. **单例模式**: 单例模式是一种限制类...

    设计模式 For iOS-02-单例模式

    单例模式是一种常用的软件设计模式,特别是在iOS开发中,它确保一个类仅有一个实例,并提供一个全局访问点。iOS SDK中广泛应用了单例模式,比如UIApplication和NSFileManager等类就是以单例形式存在。 在iOS开发中...

    设计模式-单例模式(讲解及其实现代码)

    但这种方式在多线程环境下不安全,可能导致多个实例。 ```java public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance ...

    设计模式--单例模式java例子

    这里,volatile关键字确保了多线程环境下的可见性和有序性。 4. **静态内部类**:利用类加载机制保证单例的唯一性,同时避免了线程同步问题。例如: ```java public class Singleton { private Singleton() {} ...

    IOS应用源码Demo-单例模式-毕设学习.zip

    在"IOS应用源码Demo-单例模式-毕设学习.zip"这个压缩包中,你可以找到一个关于单例模式的实际示例,这对于正在进行毕业设计或者论文写作的iOS开发者来说是一份宝贵的学习资料。 单例模式的主要特点和优势包括: 1....

    使用C++11实现线程安全的单例模式

    线程安全的单例模式在多线程环境下尤其重要,因为不正确的实现可能导致多个线程创建多个实例,这违反了单例模式的基本原则。C++11引入了新的特性,如std::mutex和std::call_once,使得实现线程安全的单例模式变得...

    java-单例模式几种写法

    单例模式是软件设计模式中的一种,用于控制类的实例化过程,确保一个类只有一个实例,并提供全局访问点。...同时,需要注意的是,单例模式虽然常用,但在某些情况下可能不适合,如当需要多个实例或者类需要被继承时。

    c++设计模式-单例模式

    **单例模式**是软件设计模式中的一种,属于创建型模式。在C++中,单例模式确保一个类只有一个实例,并提供一个全局访问点。这种模式通常用于管理共享资源,如数据库连接、日志系统或者配置文件等。单例模式的主要...

    C#设计模式学习与演变过程-2-单例模式

    单例模式是软件设计模式中的一种经典模式,它旨在确保一个类只有一个实例,并提供一个全局访问点。在C#编程中,单例模式的应用广泛,特别是在需要频繁实例化然后销毁的对象,或者创建对象需要消耗大量资源的情况下,...

    优秀的设计模式示例-单例模式

    单例模式是软件设计模式中的一种经典模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制共享资源、管理系统级别的服务或者简化对象间的交互。以下是对单例模式的详细...

    C++ 多线程和多线程下的单例模式

    本资源描述了C++11 中多线程的创建,C++11中std命名空间中将boost库中的Thread加入,boost多线程从准标准变为标准,其中还介绍了C++ 多线程下的单例模式的使用,本文档为txt文档

    乐在其中设计模式(C#)-单例模式(SingletonPattern)[收集].pdf

    但是,单例模式也有一些潜在的问题,如测试困难(因为无法通过构造函数注入依赖)、难以进行并行编程(多线程环境下需要特殊处理)以及可能导致全局状态的滥用等。 接下来是适配器模式(Adapter Pattern)的介绍。...

    多线程单例模式并发访问

    ### 多线程单例模式并发访问 #### 一、多线程基础概念 在讨论多线程单例模式及并发访问之前,我们先来了解一些基本概念。 **进程**和**线程**是计算机科学中的两个核心概念,它们之间的关系紧密而复杂。 - **进程...

Global site tag (gtag.js) - Google Analytics