existe um 'bloco até que a condição se torne verdadeira' em jav

Estou escrevendo um thread de ouvinte para um servidor e, no momento, estou usando:

while (true){
    try {
        if (condition){
            //do something
            condition=false;
        }
        sleep(1000);

    } catch (InterruptedException ex){
        Logger.getLogger(server.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Com o código acima, estou enfrentando problemas com a função run que comem todo o tempo da CPU em loop. A função de suspensão funciona, mas parece ser uma correção improvisada, não uma soluçã

Existe alguma função que seria bloqueada até que a variável 'condição' se tornasse 'verdadeira'? Ou o loop contínuo é o método padrão de espera até que o valor de uma variável seja alterado?

questionAnswers(6)

yourAnswerToTheQuestion