`
程序员是怎么炼成的
  • 浏览: 33355 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java单例 多线程下

    博客分类:
  • java
阅读更多

 public static A  getInstance(){

        if(a== null){①

        synchronized (A.class) {

        if(a== null)②

        a= new A();

}

        }

        return a;

    }

加上①和②双重判断的原因在于:

    如果两个线程同时通过了①的判断,t1获取了类锁,开始执行初始化,t1执行完毕,释放锁,接着t2进入同步块

    若没有②的再次判断,则a属性还是会被初始化,所以需要加上①和②两个判断。

 

   不加①判断时,每个线程在调用该方法时一上来就会被阻塞,加①的判断用意为:若该实例未被初始化才进入同步,

   若已经初始化,就不必要再进入同步方法了,其他线程也就不会被阻塞了。

 

 

所以,①判断是为了性能,②判断是为了单例安全。

分享到:
评论

相关推荐

    Java 单例模式线程安全问题

    然而,在多线程环境下,单例模式可能会遇到线程安全问题,因为多个线程可能会同时访问同一个实例,从而导致数据不一致和其他问题。 在 Java 中,单例模式的实现可以使用双重检查锁机制、静态内部类和枚举类型等方式...

    多线程并发下的单例模式-源码

    该资源是多线程并发下的单例模式-源码,几乎包含了所有方式实现的单例模式,并且能够确保在多线程并发下的线程安全性。 读者可结合本人博客 http://blog.csdn.net/cselmu9?viewmode=list 中的《线程并发之单例模式...

    java单例模式实例

    在多线程环境下,可能会创建多个实例。例如: ```java public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == ...

    Java 单例模式.pptx

    - **线程安全问题**:懒汉式单例模式在多线程环境下可能会导致创建多个实例,因此需要采用同步机制保证线程安全,例如使用`synchronized`关键字。 - **静态内部类方式** - **实现**: ```java class Single3 {...

    Java单例模式设计

    在这种模式下,Singleton类在类加载时即被初始化,所以不存在多线程下的安全性问题,同时也避免了同步带来的性能影响。 **2. 懒汉单例模式** 懒汉单例在第一次调用`getInstance`方法时才进行实例化,因此叫做懒...

    Java 单例模式 懒汉模式

    Java 单例模式 懒汉模式 //懒汉式 多线程中不可以保证是一个对象

    Java多线程实战之单例模式与多线程的实例详解

    Java多线程实战之单例模式与多线程的实例详解 单例模式是Java多线程编程中最常用的设计模式之一,它的主要作用是确保一个类在应用程序中只有一个实例,并提供一个全局访问点。单例模式有多种实现方式,如饿汉模式、...

    JAVA单例模式的几种实现方法

    - **线程安全问题**:虽然通过`synchronized`关键字解决了多线程下的同步问题,但这种方法降低了程序的执行效率,特别是在高并发环境中。 - **双重检查锁定**:为了解决性能问题,通常采用双重检查锁定来优化,但这...

    使用Java单例模式实现一个简单的日志记录器.txt

    1. **懒汉式(线程不安全)**:实例化发生在getInstance()方法中,但在多线程环境下可能造成多个实例的问题。 2. **懒汉式(线程安全)**:通过synchronized关键字保证线程安全。 3. **饿汉式**:在类加载时就完成了...

    java单例模式的例子

    Java单例模式是一种常见...在实际开发中,应谨慎使用单例模式,尤其是在多线程环境和需要考虑可测试性的场景下,要权衡其利弊。同时,考虑到Java 9及更高版本中的模块化系统,单例模式的使用也需要结合模块化进行考量。

    Java实现多种单例模式

    它在多线程环境下是安全的,但比饿汉式稍微复杂一些,因为需要添加volatile关键字来确保可见性。 ```java public class SingleInstance3 { private volatile static SingleInstance3 instance; private ...

    java单例模式连接数据库源码

    这种实现方式在多线程环境下不安全,可能导致多个实例的创建。 2. **饿汉式**:在类加载时就完成初始化,保证了线程安全,但不满足懒加载需求。 3. **双重检查锁定(DCL)**:在多线程环境中,确保了单例的唯一性和...

    java 多线程编程实战指南(核心 + 设计模式 完整版)

    - **单例模式**:考虑多线程环境下的线程安全单例实现,如双重检查锁定。 - **读写锁**:`ReentrantReadWriteLock`提供读写分离的锁机制,提高并发效率。 6. **并发编程最佳实践** - **避免过度使用同步**:合理...

    synchronized与单例的线程安全

    在Java编程语言中,线程安全是多线程环境下程序正确执行的重要概念。"synchronized"关键字和单例模式是确保线程安全的两种常见手段。本文将详细探讨这两个概念及其在实现线程安全中的作用。 一、synchronized关键字...

    Java单例类

    Java单例类详解 Java单例类是一种常见的设计模式,具有三个特点:单例类只能有一个实例、单例类必须自己创建自己的唯一实例、单例类必须给所有其他对象提供这一实例。单例模式可以分为三种:懒汉子式单例、饿汉子式...

    多线程单例模式并发访问

    总结起来,多线程环境下的单例模式实现需要注意线程安全问题,尤其是懒汉式单例,需要采取适当的同步措施来防止多线程环境下的实例化问题。此外,对于不同场景的需求,可以选择不同的实现方式来优化性能和资源使用。

    java单例模式代码实例

    在第一次调用getInstance()时才创建实例,但线程不安全,多线程环境下可能导致多个实例。 ```java public class Singleton { private static Singleton instance; private Singleton() {} public static ...

Global site tag (gtag.js) - Google Analytics