thread - synchronized java




Comment retarder en Java? (2)

Cette question a déjà une réponse ici:

J'essaie de faire quelque chose en Java et j'ai besoin de quelque chose pour attendre / retarder pendant un certain temps en boucle.

while (true) {
    if (i == 3) {
        i = 0;
    }

    ceva[i].setSelected(true);
    //need to wait here
    ceva[i].setSelected(false);
    //need to wait here
    i++;
}

Je veux construire un séquenceur pas à pas et je suis nouveau sur Java. Aucune suggestion ? Merci!


Si vous voulez faire une pause, utilisez java.util.concurrent.TimeUnit :

TimeUnit.SECONDS.sleep(1);

Pour dormir pendant une seconde ou

TimeUnit.MINUTES.sleep(1);

Pour dormir pendant une minute.

Comme il s'agit d'une boucle, cela présente un problème inhérent - la dérive. Chaque fois que vous exécutez du code et que vous dormez, vous dérivez un peu chaque seconde. Si c'est un problème, n'utilisez pas le sleep .

De plus, le sleep n'est pas très flexible lorsqu'il s'agit de contrôler.

Pour exécuter une tâche toutes les secondes ou avec un délai d'une seconde, je recommande fortement un ScheduledExecutorService et scheduleAtFixedRate ou scheduleWithFixedDelay .

Par exemple, pour exécuter la méthode myTask chaque seconde (Java 8):

public static void main(String[] args) {
    final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
    executorService.scheduleAtFixedRate(App::myTask, 0, 1, TimeUnit.SECONDS);
}

private static void myTask() {
    System.out.println("Running");
}

Et en Java 7:

public static void main(String[] args) {
    final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
    executorService.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            myTask();
        }
    }, 0, 1, TimeUnit.SECONDS);
}

private static void myTask() {
    System.out.println("Running");
}

Vous devez utiliser l'appel Thread.sleep() .

Plus d'infos ici: sleep()





wait