Иерархические блокировки мьютексов в Java

Я хочу иметь возможность блокировки на основе иерархии файловой системы. Например:

Поток 1:

lock("/");
doStuff();
unlock();

Поток 2:

lock("/sub/foo");
doStuff();
unlock();

Поток 3:

lock("/sub/bar");
doStuff();
unlock();

Если поток 1 получает блокировку первым, потоки 2 и 3 будут заблокированы до тех пор, пока поток 1 не разблокируется. Однако, если поток 2 получает блокировку первым, поток 3 должен иметь возможность выполняться одновременно с потоком 2. Общее правило состоит в том, что если есть блокировка в родительском каталоге, поток должен блокироваться.

Есть ли в Java что-нибудь встроенное, что может помочь решить эту проблему? Я не хочу хранить блокировку для каждого каталога, потому что будут сотни тысяч каталогов.

11
задан Scott Frazer 15 February 2012 в 21:23
поделиться