0

J'ai une méthode qui utilise ExecutorService pour planifier des tâches. J'ai besoin que la tâche soit terminée après un certain laps de temps. Comment puis-je spécifier une telle heure?Comment définir le délai d'attente d'une tâche à l'aide d'ExecutorService en Java

EDIT: Je un processus qui devrait se terminer après avoir attendu x quantité de temps pour une ressource soit disponible, au lieu d'attendre indéfiniment.

+3

vous avez la réponse ici - http://stackoverflow.com/questions/2758612/executorservice-that-interrupts -tasks-after-a-timeout –

Répondre

0

Ce comportement d'arrêt d'exécution devrait vraiment être implémenté par la tâche elle-même. Vous pouvez essayer d'arrêter le thread de force, mais cela provoque des problèmes d'interblocage.

Vous devez laisser les tâches implémenter la logique de temporisation, afin qu'elles puissent se fermer d'une manière appropriée.


Voici un exemple de base d'une tâche qui attend sur une ressource:

@Override 
public Object call() throws Exception { // In a Callable<Object> 
    long startTime = System.currentTimeMillis(); 
    while(System.currentTimeMillis() - startTime < 5000) { // wait for max 5 seconds. 
     if(resource.isAvailable()) { 
      // Do something with the resource 
      return someValue; 
     } 
    } 

    throw new TimeoutException("Resource could not be acquired"); 
} 
+0

merci, mais je parle de timing ici. ** Comment définir un intervalle de temps ** sur l'exécuteur, après quoi il termine le fil. J'ai un processus qui devrait se terminer après avoir attendu x temps pour qu'une ressource devienne disponible, au lieu d'attendre indéfiniment. – nikk

+0

@Nikk Je sais ce que vous voulez, mais ce n'est pas possible avec un service d'exécution, à moins que vous n'ayez pas besoin d'appeler '' 'shutdownNow()' '' '' '. Mettre fin à un fil de discussion n'est pas une bonne idée. Ce n'est pas un mécanicien fiable. C'est l'une des raisons pour lesquelles la méthode '' 'stop''' sur' '' Thread''' est obsolète. Vous devez déléguer la terminaison à la tâche elle-même, afin qu'elle puisse implémenter la logique pour se fermer de la manière appropriée. –

+0

Je vois. Alors, quelle est la technique utilisée en Java pour empêcher un programme d'attendre indéfiniment qu'une ressource soit disponible? – nikk