`
form_rr
  • 浏览: 8225 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
文章分类
社区版块
存档分类
最新评论

双重检查的单例的同步问题思考

阅读更多
关于双重检查的单例问题,很多人都讨论过很多次。最保险的方法就是增加一个内部类来解决,但是这同时也增加了一个无必要的类。对于class的卸载来说增加了负担。我想可以不可以通过如下的修改来解决java的无序写入问题。看代码中的注释部分!
private static Test inst = null;
public static Test getInstance(){
if( inst==null ){
synchronized(Test.class) {
if( inst==null ){
Test _t = new Test(); // 创建一个临时对象
inst = _t; // 把这个对象赋值给inst。避免直接赋值给inst
}
}
}
return t;
}

再追加一个问题:
Test _t = new Test(); inst = _t;
是否会被编译器优化为:inst = new Test() ?
0
2
分享到:
评论

相关推荐

    Java双重检查加锁单例模式的详解

    Java双重检查加锁单例模式是一种常用的单例模式实现方法,但是在多线程环境下,它存在一些问题。在这篇文章中,我们将探讨Java双重检查加锁单例模式的详解,包括它的优点和缺点,以及如何正确地使用它。 Java双重...

    单例模式与双重检测

    而双重检测机制则是实现线程安全单例的一种高效方法,通过两次检查和`volatile`关键字确保了单例的正确创建。在实际开发中,我们需要根据具体需求选择合适的单例实现方式,以达到最佳的性能和可维护性。

    单例双检锁

    在努力创建更有效的代码时,Java 程序员们创建了双重检查锁定习语,将其和单例创建模式一起使用,从而限制同步代码量。然而,由于一些不太常见的 Java 内存模型细节的原因,并不能保证这个双重检查锁定习语有效。 ...

    面试官的一道简单的单例模式问题给我问懵了,详解单例模式双重检查加锁为什么要加volatile关键字!

    双重检查加锁模式在创建单例时,首先检查单例是否已经创建,如果未创建,才进行同步创建。这样,只有首次创建单例时才会获取锁,提高了性能。但如果没有`volatile`修饰,线程可能看到的是局部缓存的、尚未完全初始...

    Java-设计模式-单例模式-实现源码(简单实现、双重检查锁、静态内部类、枚举类)

    双重检查锁定是解决上述问题的一种策略,它确保了即使在多线程环境下,也只会创建一个单例。这种方式利用了Java内存模型的特性,确保了线程安全且避免了不必要的同步开销。 ```java public class Singleton { ...

    23钟设计模式之单例模式

    3. 双重检查锁定(DCL)懒汉式:为了避免每次调用都进行同步,我们可以采用双重检查锁定的方式,只在真正需要创建单例时进行同步。这种方式既实现了延迟加载,又避免了不必要的同步开销。 ```java public class ...

    xfhy#Android-Notes#7.单例模式的双重检查锁为什么必须加volatile1

    这种写法可以保证线程安全.两个if都是不能去掉的.如果去掉第一个if: 那么所有的线程都会到这里来先获取锁,然后判断singleton是否为空.所有线程都会串行

    线程安全的单例模式

    双重检查锁定(Double-Checked Locking, DCL)技术在懒汉式的同步基础上做了优化,只在第一次实例化时进行同步操作,避免了每次调用都同步带来的性能损耗。需要注意的是,这里使用了 `volatile` 关键字来确保可见性...

    单例模式(饿汉模式、懒汉模式、DCL单例模式、枚举)

    本文将详细讨论四种常见的单例实现方式:饿汉模式、懒汉模式、双重检查锁定(DCL)单例模式以及枚举单例。 1. **饿汉模式**: 饿汉模式是在类加载时就完成了实例化,避免了线程同步问题。这种方式简单且安全,但...

    五种单例模式

    3. **双重检查锁定(DCL)单例**: 这种方式结合了懒汉式和饿汉式的优点,既延迟了实例化,又保证了线程安全。通过两次检查instance是否为null来避免不必要的同步。 ```java public class Singleton { private ...

    asp.net中c++单例实现问题分析__1.docx

    总结来说,C++在ASP.NET环境中实现单例模式需要注意线程安全问题,可以通过静态成员初始化(饿汉模式)、加锁或双重检查锁定(懒汉模式)等方式来解决。根据具体需求选择合适的实现方式,同时避免在单例构造函数中...

    java单例模式实例

    为了解决懒汉式单例的性能问题,可以使用双重检查锁定(Double-Check Locking,DCL)模式,它在确保线程安全的同时减少了同步开销: ```java public class Singleton { private volatile static Singleton ...

    OC单例模式讲解

    1. **双重检查锁定(Double-checked locking)**:这是一种常用的解决线程安全问题的方法,可以在不牺牲性能的情况下保证单例模式的线程安全。 2. **使用`@synchronized`关键字**:在获取实例的方法中使用 `@...

    Java单例模式应用研究.pdf

    双重检查锁单例模式(Doubly Checked Locking Singleton)是懒汉式单例模式的一种改进版,既实现了延迟加载,又解决了多线程安全问题,同时也减少了同步的开销。具体实现如下: ```java public class UserService { ...

    单例模式.ppt

    3. **双重检查锁定(Double-Check Locking)**: 这是一种优化的线程安全实现,试图减少不必要的同步开销。它在`getInstance()`方法中加入两次检查`instance`是否为null,只有在确认未初始化时才进行同步创建。这种...

    Android单例模式

    2. **双重检查锁定**:提高效率的同时保证线程安全。 ```java public static Singleton getInstance() { if (single == null) { synchronized (Singleton.class) { if (single == null) { single = new ...

    7种单例模式

    4. **双重检查锁定(DCL)单例**: 结合了懒汉式的延迟初始化和饿汉式的线程安全性,更高效。 ```java public class Singleton { private volatile static Singleton instance; private Singleton() {} public...

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

    双重检查锁定是一种解决懒汉式多线程问题的方法。它通过减少同步代码块的范围,只在instance为null时才同步,这样既解决了多线程问题,又提高了性能。 4. 静态内部类(Initialization on Demand Holder) 静态内部...

    设计模式之单例模式源码demo

    3. **双重检查锁定(DCL,Double Check Locking)单例模式**:结合了饿汉模式和懒汉模式的优点,既延迟了初始化,又保证了线程安全。在多线程环境下,只有在`instance`为`null`时才会进入同步块,避免了不必要的同步...

Global site tag (gtag.js) - Google Analytics