Может ли поток вызвать wait () для двух блокировок одновременно в Java (6)

Я только что возился с потоками в Java, чтобы разобраться с ними (кажется, это лучший способ сделать это), и теперь понимаю, что происходит с synchronize, wait () и notify ().

Мне интересно, есть ли способ wait () на двух ресурсах одновременно. Я думаю, что следующее не совсем то, о чем я думаю (редактировать: обратите внимание, что обычные циклы while не включены в этот пример, чтобы сосредоточиться только на освобождении двух ресурсов):

synchronized(token1) {
    synchronized(token2) {
        token1.wait();
        token2.wait(); //won't run until token1 is returned
        System.out.println("I got both tokens back");
    }
}

В этом (очень надуманном) случае token2 будет удерживаться до тех пор, пока не будет возвращен token1, затем token1 будет удерживаться до тех пор, пока не будет возвращен token2. Цель состоит в том, чтобы выпустить оба token1 и token2, а затем возобновить, когда оба будут доступны (обратите внимание, что перемещение token1.wait () за пределы внутреннего синхронизированного цикла - это не то, к чему я стремлюсь).

Цикл, проверяющий, доступны ли оба, может быть более подходящим для достижения такого поведения (будет ли это приближаться к идее двойной проверки блокировки?), Но потребует дополнительных ресурсов - я не ищу окончательного решения, поскольку это просто чтобы удовлетворить мое любопытство.

редактировать Давайте просто ради аргумента скажем, что два токена здесь представляют два разных ресурса, которые поток должен использовать одновременно, и что некоторым другим потокам понадобятся оба одновременно.

Ответы на вопрос(2)

Ваш ответ на вопрос