J'ai ce problème, j'ai et tâche créé tous les 50 milllisecondes: p> Cependant, je reçois cette erreur à partir de temps Pour le temps: P> Exécuter: Que dois-je faire? Merci p> p> mytask code> prend parfois un certain temps pour compléter (comme 2-3 secondes environ), mais NewsinglethreadscheduledExecutor garantit que le prochain mytask planifié attendra que le courant actuel se termine. P>
java.util.concurrent.reçudexecutionException code> p>
3 Réponses :
Cette exception sera lancée lorsque: P>
Je suppose que ce dernier se passe. Lorsque vous exécutez votre tâche et qu'il faut beaucoup de temps, les tâches programmées ultérieures ne peuvent pas être exécutées car il n'y a pas assez de threads disponibles dans la piscine. P>
soit: p>
Voir aussi threadpoolEcutor Javadoc < / a> p>
Comment utiliser CachedTheadpool dans ma situation? Executor.ScheduleatFixeDrate (Mytask, 0, 50, TimeUnit.Milliseconds); Comment est-il possible de changer la politique de rejet threadpoolexecutive? Merci
considère ce que fait l'exécutif. Il gère une seule tâche toutes les 50 millisecondes, selon vos instructions. En supposant que cette tâche prend moins de 50 millisecondes à courir, tout va bien. Cependant, chaque souvent, il faut 2-3 secondes pour courir. Lorsque cela se produit, l'exécuteur exécutant essaie toujours d'exécuter toutes les 50 millisecondes, mais comme il n'a qu'un seul fil, il ne peut pas et rejette ces exécutions qui sont déclenchées pendant que votre tâche de longue date est toujours en cours. Cela provoque l'exception que vous voyez. P>
Vous avez deux choix pour résoudre ce problème (en supposant que vous souhaitiez rester avec un seul fil): P>
Utilisez Modifiez la manière dont l'exécuteur traite les défaillances à exécuter. La valeur par défaut consiste à enregistrer une exception, mais vous pouvez le dire de l'ignorer, par exemple. Jetez un coup d'œil aux sous-classes de L'option Suspective (1) est ce que vous voulez. P> SchecheWithFixedDelay code> plutôt que
planifiantAtfixeDrate code>. Si vous lisez soigneusement Javadoc, vous verrez que
SchecheWithFixedDelay code> attendra 50 millisecondes entre la finition d'une tâche et le début de la prochaine, il ne "se chevauchera jamais", même si l'un d'entre eux prend beaucoup de temps. En revanche,
SchedgeAreatFixeDrate Code> tentera d'exécuter toutes les 50 millisecondes, quelle que soit la durée de chacune de chacune. P> li>
java.util.concurrent.reçudexechargerdler code>, par exemple
interrompupolicy code>, qui dépose simplement silencieusement la tâche qui ne peut pas être exécutée. Vous pouvez les utiliser en construisant directement
planifiez planchedHeadpoolEcutor code> et en passant dans le gestionnaire au constructeur, plutôt que d'utiliser le
exécutants code> classe d'usine. P> li>
ol>
@skaffman: En fait, c'est exactement le contraire de ce que vous avez dit en 1. :) Javadoc: ScheduleAtfixeDrate: Si une exécution de cette tâche prend plus de temps que sa période, les exécutions ultérieures peuvent commencer tardivement, mais ne seront pas exécutés simultanément
avec Java 7 tous les deux attendront jusqu'à la première exécution étant prête, puis commencer la suivante! p>
vérifier ici:
http://download.java.net /jdk7/archive/b123/docs/api/java/util/concurrent/scheduledthreadpoolEcutor.html p>
ou ici:
http://docs.oracle.com/javase /7/docs/api/java/util/concurrent/scheduledthreadpoolExecutor.html P>
S'il vous plaît soyez plus précis sur ce que vous entendez par «de temps en temps». Cette exception ne devrait être jetée qu'au moment de l'appelant
Execute () code> sur l'exécuteurService.
En fait, RejetedExecutionException est lancée par Executor.scheduleatfixeDrate ()
@Andrey, vous devez nous donner de manière significative plus d'informations, en commençant par une trace de pile montrant l'exception.
@Jim, oui, je veux dire "pour le moment le travail est soumis", par opposition à "de temps à autre" :)
Oui, parfois rejetéExceptionException est jeté lorsque j'appelle ScheduleAtfixeDrate (pas toujours, mais je suppose qu'il commence à jeter l'exception lorsque mon Mytask prend plus de temps pour terminer que toujours).