多线程单例 可以概括为两中模式(饿汉模式和懒汉模式)

如何保证多线程下的单例。

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-07-30 23:18:29

多线程单例 可以概括为两中模式(饿汉模式和懒汉模式)的相关文章

详谈单例、饿汉、和懒汉模式

一.基本概念 单例模式属于创建型设计模式. 确保一个类只有一个实例,并提供该实例的全局访问点. 实现: 使用一个私有构造函数.一个私有静态变量以及一个公有静态函数来实现. 二.结构 类图: 私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量. 三.几类经典单例模式实现 1.懒汉式-线程不安全 下面的实现中,私有静态变量 uniqueInstance 被延迟实例化,这样做的好处是,如果没有用到该类,那么就不会实例化 uniqueInstance,从而节约资

IOS多线程--单例

单例 iOS中,如何实现一个真正的单例 单例问题最担心的就是线程安全,因为它常常被多个控制器同时访问 1.保证allocWithZone:方法是线程安全的,当调用super方法的时候使用dispatch_once方法锁住 2.保证单例实现方法也使用dispatch_once方法锁住创建对象的过程 3.dispatch_once 被广泛用在单例,缓存等代码中,用来保证只执行一次 在单线程中没有意义,但是在多线程中,其低负载,高的可依赖性,接口简单等,赢得五星好评 static dispatch_o

黑马程序员_java多线程 单例设计

------- <a href="http://www.itheima.com" target="blank">android培训</a>.<a href="http://www.itheima.com" target="blank">java培训</a>.期待与您交流! ---------- 一.线程的方法 1.yield让出cpu 2.setPriority()设置线程的优先

单例陷阱——双重检查锁中的指令重排问题

之前我曾经写过一篇文章<单例模式有8种写法,你知道么?>,其中提到了一种实现单例的方法-双重检查锁,最近在读并发方面的书籍,发现双重检查锁使用不当也并非绝对安全,在这里分享一下. 单例回顾 首先我们回顾一下最简单的单例模式是怎样的? /** *单例模式一:懒汉式(线程安全) */ public class Singleton1 { private static Singleton1 singleton1; private Singleton1() { } public static Singl

5.29 多线程 单例

多线程中的3种单例 1.饿汉式 无线程安全问题 2.懒汉式 有线程安全问题要加同步 3.内部类 方式与饿汉式基本相同. 多线程资源的共享 1.ThreadLocal  多线程 多个实例 无需互相交互的情况下使用,http://www.tuicool.com/articles/qYJrA3 2.sycnrorid   必须等待 3.reentrantlock 可以根据情况判断是否等待 http://www.apihome.cn/api/java/ReentrantLock.html

iOS核心笔记——多线程-单例设计模式

1.单例设计模式: 2.单例设计模式实现(ARC模式): 2-1.单例设计模式步骤: ?重要:①提供一个静态全局变量:②重写allocWithZone方法,使用一次性方法保证只分配一次存储空间.③提供快速创建单例对象的类方法:④严谨起见,还应重写copyWithZone.mutableCopyWithZone方法. 2-2.确保内存分配: 2-3.提供类方法: 3.单例模式三个问题: ?重要:①:怎么实现一个单例模式?(重写allocWithZone方法)②:内部是怎么确保只分配一次内存?(在a

单例模式中的饿汉式单例和懒汉式单例

饿汉式单例: 懒汉式单例 原文地址:https://www.cnblogs.com/jyfby/p/8961600.html

JAVA中的饿汉式和饱汉式单例模式及jdk中Runtime类的单例模式实现方式详解

一.描述 单例模式是一种非常常见的设计模式,即一个类只能有一个对象(实例),一般通过将该类的构造器私有化,来阻止在该类外创建该类的对象,并提供给外界一个唯一的对象(这个对象在该类中创建). java中的单例模式常见的有两种实现方式,一种是恶汉方式,即将该类对象用static休息并且在类加载的时候进行初始化:另一种是饱汉方式,在程序中需要用到该对象的时候才初始化,一旦初始化一次就不会再重新生成该对象. JDK中的Runtime类其实也是一种单例模式,而且其采用的是饿汉的方式. 二.源代码 pack

单例模式中的饿汉模式和懒汉模式【一看就懂】

以Java为例: 饿汉: public final class VirtualCore { private static VirtualCore gCore = new VirtualCore(); private VirtualCore() { } public static VirtualCore get() { return gCore; } } 懒汉: public final class VirtualCore { private static VirtualCore gCore =