多线程下的单例

1多线程安全单例模式一(不使用同步锁).

 1  1 public class Singleton {
 2  2     private Singleton()
 3  3     {}
 4  4     private static Singleton singleton;
 5  5
 6  6     public static Singleton getInstance()
 7  7     {
 8  8         if(singleton ==null)
 9  9         {
10 10             singleton =new Singleton();
11 11         }
12 12         return singleton;
13 13     }
14 14
15 15
16 16 }

2.多线程安全单例模式一(使用同步锁).

public class Singleton {
    private Singleton()
    {}
    private static Singleton singleton;
    //sychronized 同步
    public static synchronized Singleton getInstance()
    {
        if(singleton ==null)
        {
            singleton =new Singleton();
        }
        return singleton;
    }

}

3.多线程安全单例模式一(使用双重同步锁).

public class Singleton {
     private static Singleton instance;
     private Singleton (){
     }
     public static Singleton getInstance(){    //对获取实例的方法进行同步
       if (instance == null){
           synchronized(Singleton.class){
               if (instance == null)
                   instance = new Singleton();
           }
       }
       return instance;
     }

 }
时间: 2024-10-13 21:52:01

多线程下的单例的相关文章

黑马程序员——多线程下的单例设计模式的安全问题

//多线程下的单例设计模式 class Sing { //饿汉式不存在安全问题,因为其不是线程同步的 private static Sing s = new Sing(); private Sing(){} public static Sing getInstance() { return s; } } class Single { private static Single s = null; private Single(){} public static Single getInstanc

多线程下的单例-double check

话不多说直接上代码: public sealed class Singleton { private static Singleton _instance = null; // Creates an syn object. private static readonly object SynObject = new object(); Singleton() { } public static Singleton Instance { get { // Double-Checked Lockin

iOS开发——多线程OC篇&多线程中的单例

多线程中的单例 1 #import "DemoObj.h" 2 3 @implementation DemoObj 4 5 static DemoObj *instance; 6 7 8 9 // 在iOS中,所有对象的内存空间的分配,最终都会调用allocWithZone方法 10 // 如果要做单例,需要重写此方法 11 // GCD提供了一个方法,专门用来创建单例的 12 + (id)allocWithZone:(struct _NSZone *)zone 13 { 14 sta

Swift语言下的单例设计模式实现(SINGLETON)

一.意图 保证一个类公有一个实例,并提供一个访问它的全局访问点. 二.使用场景 1.使用场景 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时. 2.实现的重要三个步骤 私有化构造方法(Swift不支持) 使用一个静态变量保存实例的引用 提供一个全局的访问方法 三. Swift语言下的实现 Swift语言不支持变量及方法的权限,没有办法隐藏变量及方法,可以随意直接创建一个实例.单例的创建有很多写

C#下的单例实现

本文介绍了C#下关于单例的三种实现方法. 最普通的一种: 以下是引用片段: using System; public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton Instance { get { if (instance == null) instance = new Singleton(); return instance; } } } 这

【iOS】ARC-MRC下的单例及其应用

单例的应用十分普遍,单例模式使一个类只有一个实例. *易于供外界访问. *方便控制实例个数,节约系统资源. *OC中的常见单例: 如:UIApplication,  NSNotificationCenter,  NSUserDefaults, NSFIleManager. *应用程序中用到的单例: 如:背景音乐,音效管理等. 一.ARC中实现单例 创建单例的步骤: *1.定义一个全局的静态变量_instance,用来记录“第一次”被实例化出来的对象. *2.重写allocWithZone方法,此

一个多线程下的单实例实现故障

最近在asp.net项目中碰到的一个问题. 一个编码器模块使用单实例实现,结果碰到了编码ID重复的异常. public class IdGenerator { private static IdGenerator single; public static IdGenerator Single { get { if (null == single) { single = new IdGenerator(); } return single; } } protected IdGenerator()

iOS多线程中的单例

1 #import "MyHandle.h" 2 3 static MyHandle *handle = nil; 4 @implementation MyHandle 5 // 传统写法 6 // 此时如果多个任务并发执行,他就不会满足单例的优点 7 //+ (MyHandle *)shareMyHandle { 8 // if (nil == handle) { 9 // handle = [[MyHandle alloc] init]; 10 // } 11 // return

4创建型模式之单例模式__多线程下的懒汉式单例和饿汉式单例

//1"懒汉"模式虽然有优点,但是每次调用GetInstance()静态方法时,必须判断 //      NULL == m_instance,使程序相对开销增大. //2多线程中会导致多个实例的产生,从而导致运行代码不正确以及内存的泄露. //3提供释放资源的函数 讨论:   这是因为C++中构造函数并不是线程安全的. C++中的构造函数简单来说分两步: 第一步:内存分配 第二步:初始化成员变量 由于多线程的关系,可能当我们在分配内存好了以后,还没来得急初始化成员变量,就进行线程切换