是否可以使用单个Property文件管理并发写入?

时间:2013-07-05 08:53:12

标签: java concurrency

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

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

MyClass多次实例化,每个实例都可以修改属性文件 。我想我可以使用临时文件和锁来管理这种并发,但我更喜欢使用已经存在的函数。但是,我没有找到。我的问题是:Property类是以特殊方式管理并发,还是有多用户等价?

4 个答案:

答案 0 :(得分:8)

虽然Properties文件 是线程安全的,但如果使用多次调用对其进行修改,则仍需要确保线程安全。 e.g。

properties.set(name, value);

是线程安全的,但是

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

线程安全,没有额外的防护,你应该围绕这些序列进行同步。

从您的问题中不清楚您的真正问题是多个进程访问此属性文件,如果是这种情况,那么文件锁定可能是合适的。有关详细信息,请参阅this question/answer

答案 1 :(得分:1)

根据documentation

  

此类是线程安全的:多个线程可以共享单个Properties对象,而无需外部同步。

答案 2 :(得分:1)

根据Java API,它是线程安全的:

http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html

这意味着您可以同时从不同的线程进行更改。但是,我会运行一个简单的并发测试,以确保100%。您也可以进入源文件,看看Java如何在内部处理它......

答案 3 :(得分:1)

根据Java documention

This class is thread-safe: multiple threads can share 
a single Properties object without the need for external synchronization

所以,回答是你可以在多线程环境中使用Properties实例。 您需要记住的是,如果经常对Properties进行更新,那么由于Properties中的隐式同步,您的应用程序可能会变慢。但是,如果有一段时间,那么你应该没事。