LocalFileSystem lock/release methods marked synchronized and inside they lock file channel - this produces deadlock situation. Let's see how it happens:
1. First thread locks the file and starts some long-running process.
2. Second thread tries to lock the file and it blocks inside channel lock method. It keeps LocalFileSystem instance "locked" as well.
3. First thread finished it's processing and tries to release lock - it blocks because LocalFileSystem instance is "locked" by second thread - both threads are waiting to each other.