Я хочу иметь возможность блокировки на основе иерархии файловой системы. Например:
Поток 1:
lock("/");
doStuff();
unlock();
Поток 2:
lock("/sub/foo");
doStuff();
unlock();
Поток 3:
lock("/sub/bar");
doStuff();
unlock();
Если поток 1 получает блокировку первым, потоки 2 и 3 будут заблокированы до тех пор, пока поток 1 не разблокируется. Однако, если поток 2 получает блокировку первым, поток 3 должен иметь возможность выполняться одновременно с потоком 2. Общее правило состоит в том, что если есть блокировка в родительском каталоге, поток должен блокироваться.
Есть ли в Java что-нибудь встроенное, что может помочь решить эту проблему? Я не хочу хранить блокировку для каждого каталога, потому что будут сотни тысяч каталогов.