Я прочитал это сообщение. Кто-нибудь может сказать мне, хорошо ли 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 а и б: Мне кажется, что они противоречат друг другу. Я прав? Если нет, может кто-нибудь объяснить мне, в чем смысл?