Разблокировать файл, когда программный процесс закрывается в Java?

У меня есть программа, которая блокирует файл так, где lock — это файл:

FileChannel channel = new RandomAccessFile(lock,"rw").getChannel();
FileLock lock = channel.lock();

Основная цель - с помощью дополнительной программы проверить, не была ли программа убита. Код вторичной программы выглядит так:

boolean isNotLocked = false;
while (true){
   while (isNotLocked){
       lock.renameTo(lock);
   }
//run the program again
}

Это работает в первый раз, и программа запускается снова, но после повторного запуска программы вторичная программа выдает OverlappingFileLockException и завершается. Основная программа создает замок, а не второстепенный.


person user2352923    schedule 11.11.2016    source источник
comment
Вы не можете заблокировать один и тот же файл более одного раза одновременно. Попробуйте создать lock.deleteOnExit(); с помощью rwd. А проверка со вторичной программой это lockFile.exists(). Если нет, вы можете создать еще один.   -  person newuserua_ext    schedule 11.11.2016
comment
Он имеет тот же эффект. Я не пытаюсь определить, закрывает ли пользователь его с помощью кнопки выхода или с помощью Alt + F4, я пытаюсь определить, убит ли его процесс с помощью диспетчера задач или других источников.   -  person user2352923    schedule 11.11.2016
comment
Таким образом, вы можете использовать Runtime.getRuntime().addShutdownHook() . Вот пример tutorialspoint.com/java/lang/runtime_addshutdownhook.htm.   -  person newuserua_ext    schedule 11.11.2016
comment
Кажется, это не срабатывает, я что-то не так делаю? Я создаю класс, как в примере (с другим именем), и вызываю его так: Runtime.getRuntime().addShutdownHook(new releaseLock());   -  person user2352923    schedule 11.11.2016
comment
Хм, блокировки файлов Java — это рекомендательные блокировки POSIX, которые следует снимать при выходе из программы. stackoverflow .com/questions/23562369/   -  person Raedwald    schedule 11.11.2016
comment
@ user2352923 Вы решили свою проблему? Если нет, покажите, что вы пробовали   -  person newuserua_ext    schedule 14.11.2016