Блокировка файла `properties` в Java - PullRequest
0 голосов
/ 24 февраля 2012

Я прочитал этот пост. Может кто-нибудь сказать мне, если java.nio.FileLock.lock() хорошо работает с java.util.Properties классом.

Вопрос:

Если я установлю блокировку файла свойств, который я читаю, блокирует ли это файл для другой одновременной блокировки? Код заблокирует что-то вроде:



try {

     Properties prop = new Properties();
     FileInputStream fis = new FileInputStream(new File("/my/path"));
     FileLock lock = fis.getChannel().lock();
     prop.load(fis);

} catch (FileNotFoundException e) {
   //catch it...
} catch (IOException e) {
   //catch it...
}

//....
lock.release();
//...

Спасибо!


С JavaDocs :

1. Блокировки определенного файла одной виртуальной машиной Java не перекрываются.

и

2.a. Блокировки файлов хранятся от имени всей виртуальной машины Java. Они не подходят для управления доступом к файлу несколькими потоками на одной виртуальной машине.

b. Объекты блокировки файлов безопасны для использования несколькими параллельными потоками.

Относится к 1: Я пытался заблокировать тот же файл из той же JVM, но из разных потоков, и он выдает ошибки, когда поток пытается установить блокировку для уже заблокированного файла. Я думаю, что поведение не такое, как ожидалось от JavaDoc спецификаций.

Относится к 2 a и b: мне кажется, что они противоречат друг другу. Я прав? Если нет, может кто-нибудь объяснить мне, в чем смысл?

1 Ответ

1 голос
/ 27 февраля 2012

Блокировки файлов обычно рекомендуются, то есть они влияют только на другие процессы, например JVM, которые также используют блокировки файлов. java.util.Properties вообще не делает этого, но и не обрабатывает файлы, только потоки ввода. Поэтому, если вы предоставите входные потоки из файлов, для которых вы устанавливаете / проверяете блокировки файлов, это будет работать. Но только между JVM, а не в пределах одной JVM: см. Javadoc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...