java - 线程安全方法

标签 java multithreading singleton

我目前有一个实现单例设计模式的程序:

public class Singleton {
    private static Singleton s;

    private Singleton(){

    }

    public static Singleton getInstance(){
        if(s == null){
            s = new Singleton();
        } 

        return s;
    }
}

我在一次采访中被问到,给定一个这样的程序,有哪些好的选项可以使 getInstance 方法线程安全。我知道一种方法就是在方法之前标记同步,但是面试官说还有其他更有效的方法来处理使方法线程安全的问题。

任何人都可以提供任何想法吗?

最佳答案

我至少能想到三个,尽管其中两个归结为相同的原则。

基本上,您可以让类加载器担心线程安全,或者从 Java5 开始使用双重检查锁定。

第一个版本意味着拥有一个包含实际代码的内部类/枚举,第二个版本意味着您使 Singleton 实例可变并使用通常的 if-synchronize-if 解决方案。

关于java - 线程安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9321835/

相关文章:

java - 如何在 Hibernate 中正确实现具有复合 id 的域对象?

java - 我不想在 RIA[JavaWebStart] 中收到 jre7u55 使用 "jnlp"的警告

c++ - 如何在超时内从另一个线程唤醒 select()

java - 如果我使用==,为什么安全单例实例不会为真

java - LOG.error ("IOException: "+ e.getMessage(), e); 之间有什么区别和 LOG.error ("IOException: "+e.getMessage());?

java - 了解 Java 中的对象反射优势

c - 具有分离线程的超时事件设计

c# - 为什么 .Net 没有 Thread.Start() 的通用版本?

C++:单例?如何将参数传递给构造函数?

java - 通过 EJB 共享静态单例