Все ли свойства Java Properties полностью синхронизированы? - PullRequest
9 голосов
/ 26 августа 2010

Я знаю, что класс Properties является подклассом Hashtable.Таким образом, все унаследованные методы синхронизируются, но как насчет других методов свойств, таких как store, load и т.д.?(Специально для Java 1.6)

Ответы [ 2 ]

16 голосов
/ 26 августа 2010

java1.6 javadoc говорит:

Этот класс является поточно-ориентированным: несколько Потоки могут совместно использовать один свойства объект без необходимости внешнего синхронизации.

6 голосов
/ 26 августа 2010

Я всегда считал, что заявление об отказе от ответственности вводит в заблуждение, особенно для начинающих (простите, если это не ваш случай).

Этот класс является поточно-ориентированным: несколько потоков могут совместно использовать один объект Properties без необходимости внешней синхронизации.

Даже многопоточные классы нуждаются в синхронизации больше, чем вы думаете. В этих классах синхронизируются их методы, но часто пользователь использует эти классы в более сложном контексте.

Если вы только положите / получите, то все в порядке, но с еще большим количеством кода все становится сложнее:

p.putProperty("k1","abc");
p.putProperty("k2","123");
String.out.println(p.get("k1")+p.get("k2"));

Этот пример кода печатается только для shure «abc123» в многопоточной среде, если секция является синхронизированным блоком (и даже тогда что-то может пойти не так).

По этой причине (и, конечно, из-за производительности) я предпочитаю не-поточно-безопасные классы, и меня заставляют подумать: моя программа поточно-безопасна ...

...