Je veux que mon fil attende 30 minutes. Y a-t-il des problèmes à le faire?
Vous pouvez faire dormir votre fil pendant 30 minutes comme ceci:
Thread.sleep(30 * // minutes to sleep
60 * // seconds to a minute
1000); // milliseconds to a second
En utilisant Thread.sleep
n'est pas intrinsèquement mauvais. Expliqué simplement, il indique simplement au planificateur de threads de préempter le thread. Thread.sleep
est mauvais lorsqu'il est mal utilisé.
sleep
. Mais ce n'est pas un moyen garanti. Utilisez un mutex. Voir Y a-t-il un Mutex en Java? En tant que minuterie garantie : Le temps de sommeil de Thread.sleep
n'est pas garanti. Il pourrait retourner prématurément avec un InterruptedException
. Ou il pourrait trop dormir.
De documentation :
public static void sleep(long millis) throws InterruptedException
Fait dormir le thread en cours d'exécution (arrête temporairement l'exécution) pendant le nombre de millisecondes spécifié, sous réserve de la précision et de l'exactitude des temporisateurs et des planificateurs du système.
Vous pouvez également utiliser, comme kozla1 l'a montré dans leur commentaire:
TimeUnit.MINUTES.sleep(30);
La réponse de Krumia montre déjà parfaitement comment dormir un Thread
en cours d'exécution. Parfois, l'exigence de mettre en veille ou de suspendre un thread provient du souhait d'effectuer une opération à une date ultérieure. Si tel est le cas, il vaut mieux utiliser un concept de niveau supérieur comme Timer
ou ScheduledExecutorService
:
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(operation, 30, TimeUnit.MINUTES);
Où operation
est le Runnable
que vous souhaitez exécuter en 30 minutes.
En utilisant un ScheduledExecutorService
, vous pouvez également exécuter périodiquement des opérations:
// start in 10 minutes to run the operation every 30 minutes
executor.scheduleAtFixedDelay(operation, 10, 30, TimeUnit.MINUTES);