java - 是否可以使用单个属性文件来管理并发写入?

标签 java concurrency

我在我的代码中使用属性,我对多重访问感到好奇。 我处于以下情况:

public Class MClass{
    private static Properties dicoCategories = new Properties(myPropertyFile);
    public void changeProperties(){
        // changing properties and updating the file
    }
}

MyClass被多次实例化,每次实例都可以修改属性文件 .我想我可以使用临时文件和锁来管理这种并发性,但我更愿意使用已经存在的函数。然而,我没有找到。我的问题是:Property 类是否以特殊方式管理并发性,或者是否存在多用户等效方式?

最佳答案

虽然 Properties 文件线程安全的,但如果您使用多次调用修改它,您仍然需要确保线程安全。例如

properties.set(name, value);

是线程安全的,但是

if (properties.get(name) == null)  {
   properties.set(name, value);
}

在没有额外保护的情况下不是线程安全的,您应该围绕这些序列进行同步。

从您的问题中不清楚您的真正问题是否是多个进程 访问此属性文件,如果是这样,那么也许文件锁定是合适的。参见 this question/answer了解更多信息。

关于java - 是否可以使用单个属性文件来管理并发写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17484846/

相关文章:

java - Lucene 3.6 和用于特殊字符的自定义分词器/分析器

java - 如何在android中将对象列表从一个 Activity 发送到另一个 Activity ?

java - 在多对多关系中收到 org.hibernate.id.IdentifierGenerationException

java - 发布在不持有用于发布的锁的情况下构造的 @NotThreadSafe 实例是否安全?

c++ - 宽松的内存顺序效果是否可以延长到执行线程的生命周期之后?

java - 在面向对象编程中获取特定类的所有对象

java - 阅读 OPC 值(value)观 Utgard

scala - 处理应用程序级并发 - 我有什么选择?

java - 使用 java ConcurrentHashMap 实现缓存

java - 以安全的方式设置 servlet 上下文属性