У меня есть некоторые путаницы в блокировке файла java.Java, одновременно получающий доступ к файлу среди потоков
это моё состояние.
- Каждый поток может читать/записывать файл.
- Мой файл манипулируя метод может быть вызван несколькими потоками одновременно
и моя цель ясна, не одновременно запись в файл с помощью нитей. Всегда один поток разрешал писать файл.
Мои вопросы
Если FileOutputStream.write() был поточно, у меня не было поставить какой-либо механизм параллельности в моем коде, так как код в записи() не будет блокировать до тех пор, запертый файл будет выпущен. Тем не менее, моя программа, похоже, не блокирует, когда файл открывается потоком (я не уверен в этом)
Если FileOutputStream.write() не был потокобезопасным, мне пришлось бы написать дополнительный код, чтобы сделать файл, к которому обращается только поток за раз. Поэтому я использовал FileChannel.lock() для этого. Однако, в отличие от документа JDK, он не блокирует, а создает исключение OverlappingFileLockException.
Буду признателен за ваш четкий совет.
FWIW FileChannel # lock блокируется * другими процессами * не синхронизировать между потоками одного и того же JVM: http://stackoverflow.com/questions/128038/how-can-i-lock-a-file-using -java-if-possible – Thilo
Благодаря вашей ссылке. Итак ... FileChannel.lock() действителен только для процессов, а не для потоков? и мне действительно нужно использовать синхронизационный подход ... правильно? –