我在我的代码中使用了属性,我对多重访问感到好奇。 我在以下情况中:
public Class MClass{
private static Properties dicoCategories = new Properties(myPropertyFile);
public void changeProperties(){
// changing properties and updating the file
}
}
MyClass多次实例化,每个实例都可以修改属性文件 。我想我可以使用临时文件和锁来管理这种并发,但我更喜欢使用已经存在的函数。但是,我没有找到。我的问题是:Property类是以特殊方式管理并发,还是有多用户等价?
答案 0 :(得分:8)
虽然Properties
文件 是线程安全的,但如果使用多次调用对其进行修改,则仍需要确保线程安全。 e.g。
properties.set(name, value);
是线程安全的,但是
if (properties.get(name) == null) {
properties.set(name, value);
}
不线程安全,没有额外的防护,你应该围绕这些序列进行同步。
从您的问题中不清楚您的真正问题是多个进程访问此属性文件,如果是这种情况,那么文件锁定可能是合适的。有关详细信息,请参阅this question/answer。
答案 1 :(得分:1)
此类是线程安全的:多个线程可以共享单个Properties对象,而无需外部同步。
答案 2 :(得分:1)
根据Java API,它是线程安全的:
http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html
这意味着您可以同时从不同的线程进行更改。但是,我会运行一个简单的并发测试,以确保100%。您也可以进入源文件,看看Java如何在内部处理它......
答案 3 :(得分:1)
This class is thread-safe: multiple threads can share
a single Properties object without the need for external synchronization
所以,回答是你可以在多线程环境中使用Properties实例。 您需要记住的是,如果经常对Properties进行更新,那么由于Properties中的隐式同步,您的应用程序可能会变慢。但是,如果有一段时间,那么你应该没事。