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

fxm*_*fxm 2 java concurrency

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

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

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

Bri*_*new 8

尽管该Properties文件线程安全的,但如果使用多个调用对其进行修改,则仍需要确保线程安全.例如

properties.set(name, value);
Run Code Online (Sandbox Code Playgroud)

是线程安全的,但是

if (properties.get(name) == null)  {
   properties.set(name, value);
}
Run Code Online (Sandbox Code Playgroud)

没有额外的防护,它不是线程安全的,你应该同步这些序列.

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