java - 多线程环境中跨整个应用程序的变量的单个实例

标签 java multithreading singleton volatile

我有下面的代码。

private static volatile Properties props = null;
    private static volatile StanfordCoreNLP pipeline = null;
    /**
     * 
     * @return
     */
    static {
        if (props == null) {
            props = new Properties();
            props.setProperty("annotators", "tokenize, ssplit, parse, sentiment");
        }
        if (pipeline == null) {
            pipeline = new StanfordCoreNLP(props);
        }
    } 

我希望在整个多线程应用程序中拥有变量 propspipeline 的单个实例

我的代码正确还是我遗漏了什么?

谢谢。

最佳答案

可以通过使用方法调用来消除 volatile ,并通过静态初始化仍然保留线程安全性。

private static final Properties props = initProperties();
private static Properties initProperties() {
    Properties props = new Properties();
    props.setProperty("annotators", "tokenize, ssplit, parse, sentiment");
    return props;
}

public static Properties getProperties() {
    return props;
}

编辑: 不过,为了回答你的问题,是的,你在 OP 中的代码确实是线程安全的,尽管我之前给出的是我个人的做法。

关于java - 多线程环境中跨整个应用程序的变量的单个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42023972/

相关文章:

Java - 动态创建子类

java - 如何确保字符串输入在解析为整数时不会丢失任何字符

multithreading - Matlab多线程函数

java - EnityManagerFactory 单例。请检查一下?

c++ - 单例抽象工厂模式

ios - 具有许多 UIView 的单例服务

java - @(#) 字符的含义

java - 如何使用 Java 从 Web 服务保存大文件?

java - 当线程池中没有空闲线程并且我们向池中提交任务时会发生什么?

c++ - 在 C++ 中实现进度可视化