单例饿汉为什么是线程安全的

问题描述

单例饿汉为什么是线程安全的

我不明白为什么饿汉式是线程安全的,在我想来,饿汉的对象属于类成员,而非方法成员,那么就有可能发生争夺成员资源的现象呀。

 //饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {
    private Singleton1() {}
    private static final Singleton1 single = new Singleton1();
    //静态工厂方法
    public static Singleton1 getInstance() {
        return single;
    }
}

解决方案

线程安全,这里指的不是成员对象,而是单例对象的非静态成员方法。

时间: 2024-08-02 07:06:53

单例饿汉为什么是线程安全的的相关文章

JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制

JAVA之旅(十四)--静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制 JAVA之旅,一路有你,加油! 一.静态同步函数的锁是class对象 我们在上节验证了同步函数的锁是this,但是对于静态同步函数,你又知道多少呢? 我们做一个这样的小实验,我们给show方法加上static关键字去修饰 private static synchronized void show() { if (tick > 0) { try { Thread

单例设计模式

package test; /* 单例设计模式特点 1.类不能实例化 构造方法私有化 2.类中先实例化一个对象 3.提供一个返回类对象的方法 getInstance */ public class Singleton {      public static void main(String[] args) {           // TODO Auto-generated method stub\           Single si=Single.getInstance();      

spring-一个关于单例和线程的问题

问题描述 一个关于单例和线程的问题 Spring的bean 默认是单例的也就是说每次请求获取的bean都是同一个 验证hashCode也确实是相等的. @Autowired private TestBean testBean; @RequestMapping(""test1.html"") public @ResponseBody String test1() throws InterruptedException { testBean.test(); return

asp.net中C++单例实现问题分析

  方案一  代码如下   class QMManager { public:     static QMManager &instance()     {         static QMManager instance_;         return instance_;     } } 这是最简单的版本,在单线程下(或者是C++0X下)是没任何问题的,但在多线程下就不行了,因为static QMManager instance_;这句话不是线程安全的. 在局部作用域下的静态变量在编译时

spring 单例多例,默认,懒加载,初始化调用

(1)spring 默认是单例, 单例情况下:所有线程对于同一个类共同拥有一个对象,此时如果在类里面创建一个类变量如下 由于所有线程共享一个类对象,所以也共享一个类变量,每次请求都会增加 @Controller @RequestMapping("/user") public class User { private int i=0;//类变量 @RequestMapping("/list.shtm") public String list() { i++; Syst

(单例设计模式中)懒汉式与饿汉式在多线程中的不同

/*  目的:分析一下单例设计模式中,懒汉式与饿汉式在多线程中的不同!  开发时我们一般选择饿汉式,因为它简单明了,多线程中不会出现安全问题!  而饿汉式需要我们自己处理程序中存在的安全隐患,但是饿汉式的程序技术含量更高! */ /* class SinglePerson implements Runnable{    private static SinglePerson ss = new SinglePerson("hjz", 22);//恶汉式    private int ag

java-求助!不理解为什么workPane为null,从而导致空指针 单例为饿汉变种型

问题描述 求助!不理解为什么workPane为null,从而导致空指针 单例为饿汉变种型 解决方案 AuthorityModel.getInstance()这个有没有得到值,这个要看你的源代码 解决方案二: 下面注释部分的代码可用,说明AuthorityModel.getInstance()是可以得到值的,区别在于为什么变成成员属性反而得不到值,临时变量确可以获得值?

从java.lang.Runtime看单例懒汉饿汉模式的选择

单例模式有懒汉和饿汉模式,代码就不在此赘述了.懒汉模式会带来线程安全的问题,所以一般采用饿汉模式.从Java的源代码中也可看出应该选择饿汉模式. public class Runtime {     private static Runtime currentRuntime = new Runtime();     public static Runtime getRuntime() {            return currentRuntime;     }     private Ru

老生常谈C++的单例模式与线程安全单例模式(懒汉/饿汉)_C 语言

1 教科书里的单例模式 我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个public的类方法代劳,该方法也返回单例类唯一的实例. 上代码: class singleton { protected: singleton(){} private: static singleton* p; public: static singleton* instance()