举报投诉联系我们 手机版 热门标签 名动网
您的位置:名动网 > java单例模式双重检查锁 Java 单例模式

java单例模式双重检查锁 Java 单例模式

2023-05-26 10:20 Java教程

java单例模式双重检查锁 Java 单例模式

java单例模式双重检查锁

Java单例模式双重检查锁(Double-Checked Locking)是一种用于实现单例模式的机制,它使用了一种称为双重检查锁定(double-checked locking)的技术来保证多线程情况下单例对象的唯一性。

双重检查锁定是一种优化同步的方法,它允许在多线程情况下减少同步开销。它通过使用两个if语句来减少同步的开销。在多线程情况下,如果多个线程同时进入if语句块中,则只有一个会首先执行if语句块中的代码。

Java中使用双重检查锁定来实现单例模式时,必须将单例对象声明为volatile 类型。volatile 关键字能够保证对象在多个线程间的可见性,也就是当一个对象被修改时,所有其他正在使用这个对象的地方都能立刻看到修改的效果。

public class Singleton {

    private volatile static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();  //instance 不是 volatile 类型时, 这里会重新创建新的对象, 导致出问题. 
                } 
            } 
        } 

        return instance; 

    } 
}

Java 单例模式

Java设计模式 - 单例模式


单例模式是一种创建模式。

这种模式只涉及一个单独的类,它负责创建自己的对象。

该类确保只创建单个对象。

这个类提供了一种访问其唯一对象的方法。

例如,当设计一个用户界面时,我们可能只有一个主应用程序窗口。我们可以使用Singleton模式来确保只有一个MainApplicationWindow对象的实例。

例子

下面的代码将创建一个MainWindow类。

MainWindow类的构造函数是私有的,并且有一个自身的静态实例。

MainWindow类提供了一个静态方法来获取它的静态实例到外部世界。

Main,我们的演示类将使用MainWindow类来获取一个MainWindow对象。

class MainWindow {
   //create an object of MainWindow
   private static MainWindow instance = new MainWindow();

   //make the constructor private so that this class cannot be
   //instantiated by other class
   private MainWindow(){}

   //Get the only object available
   public static MainWindow getInstance(){
      return instance;
   }

   public void showMessage(){
      System.out.println("Hello World!");
   }
}

public class Main {
   public static void main(String[] args) {
      //Get the only object available
      MainWindow object = MainWindow.getInstance();

      //show the message
      object.showMessage();
   }
}

上面的代码生成以下结果。

阅读全文
以上是名动网为你收集整理的java单例模式双重检查锁 Java 单例模式全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 名动网 mdwl.vip 版权所有 联系我们