- Это невозможно;
- Это действительно плохая идея (извините).
Он подвержен тупикам, так как он заставляет вас иметь заранее определенный порядок блокировки для всех блокировок, независимо от того, где они находятся.
Обычно хорошей идеей, если вам нужно приобрести два замка, всегда иметь заранее определенный порядок:
synchronized(LOCK1) {
synchronized(LOCK2) {
}
}
Но для глобальной блокировки потребуется какой-то протокол - глобальный заказ на приобретение - для всех блокировок. И это может быть невозможно вообще. Большинство блокировок защищают определенные, автономные, критические секции. Они не будут знать, что кто-то «выдернет» их и приобретет, и поэтому не будут написаны, чтобы справиться с этой ситуацией.
Так что это невозможно, и вы должны быть счастливы, что это не так. Хотя это кажется легким выходом, это принесет много боли.