Блокировка уровня файловой системы взаимодействует с другими приложениями. Вы получаете один из них из FileChannel. То, что вы делаете в своем примере кода, сделает файл заблокированным для другого процесса, например, vi.
Однако другие потоки Java или процессы в JVM НЕ увидят блокировку. Ключевое предложение: «Блокировки файлов хранятся от имени всей виртуальной машины Java. Они не подходят для управления доступом к файлу несколькими потоками в одной виртуальной машине». Вы не видите блокировки поэтому вы запускаете sqlitejdbc из той же JVM, что и ваше приложение.
Итак, вопрос в том, как вы видите, установила ли ваша JVM блокировку файла (если вы не управляете кодом, получающим блокировку)? Одно из предложений, которое я хотел бы получить, это попытаться получить эксклюзивную блокировку для другого подмножества файла, например, с этим кодом:
fc.tryLock(0L, 1L, false)
Если блокировка уже есть, вы должны получить исключение OverlappingFileLockException. Это немного глупо, но может сработать.