Блокировка файла свойств в java

Я прочитал это сообщение. Кто-нибудь может сказать мне, хорошо ли 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. Они не подходят для управления доступом к файлу несколькими потоками на одной виртуальной машине.

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

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

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


person artaxerxe    schedule 24.02.2012    source источник


Ответы (1)


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

person user207421    schedule 27.02.2012