84 votes

existe-t-il une fonction « bloquer jusqu'à ce que la condition devienne vraie » en Java ?

J'écris un fil d'écoute pour un serveur, et en ce moment j'utilise :

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

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

Avec le code ci-dessus, je rencontre des problèmes avec la fonction run qui consomme tout le temps du processeur en boucle. La fonction de veille fonctionne, mais cela semble être une solution de fortune, pas une solution.

Existe-t-il une fonction qui bloquerait jusqu'à ce que la variable « condition » devienne « vrai » ? Ou la boucle continue est-elle la méthode standard d'attente jusqu'à ce que la valeur d'une variable change ?

32voto

borjab Points 1839

Comme personne n'a publié de solution avec CountDownLatch. Qu'en est-il de:

 public class Lockeable {
    private final CountDownLatch countDownLatch = new CountDownLatch(1);

    public void doAfterEvent(){
        countDownLatch.await();
        doSomething();
    }

    public void reportDetonatingEvent(){
        countDownLatch.countDown();
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X