J'ai une question concernant la mise en œuvre d'une politique d'annulation pour une sous-classe de thread. Il semble être une pratique courante de le faire comme ceci:
while (!isInterrupted()) {
[...]
}
4 Réponses :
Dans votre cas, il suffit d'appeler ! IsInterrupted () code> car vous s'étendez à partir de la classe code> de la classe code>. Généralement, vous n'allez pas de thread code> - c'est pourquoi vous appelez thread.currentThread () code>. P>
Je comprends ton point de vue. Lors de la mise en œuvre d'une tâche à l'aide de l'interface exécutable, à l'aide de thread.isinterrupted () rend le sens total pour moi. Je me demande toujours pourquoi les exemples de codage que j'ai constatés dans "la simultanéité Java dans la pratique", qui a également étendu le fil utilisé fil.CurrentThread (). J'ai un chasseur qu'il y a une raison pour ça.
@Bumblegee peut-être que c'est juste une question de copie-pâte ou de consistance à travers les exemples. Je ne connais pas ce livre, mais s'il y a des exemples utilisant runnable code> aussi, je soupçonne que c'est l'un de ces deux, probablement ce dernier.
Il convient de la sorte, si ce code est en cours d'exécution en cours d'exécution. Peut-être que les auteurs craignent, que quelqu'un exécutera une méthode de course dans d'autres threads, peut-être qu'ils veulent avoir l'air identique à la vie ailleurs. Ou ils la copient en collé et ne pensaient pas. P>
Le comme pour la méthode code> code>, tout ce que vous avez affiché a du sens sur l'hypothèse que la méthode code> Exécuter code> a été appelée et appelée uniquement, par l'instance (attendue) de considérer une méthode autre que Annuler code> est clair: il dirige efficacement l'appel sur ceci.Interrupt code>; I.e l'instance de thread à laquelle la méthode code> annule code> est appliquée. p>
classe A code>. Bien que ce soit probablement une hypothèse sûre, est-ce universellement vraie? Maintenant, si vous allez me demander un exemple significatif de comment / quand cette hypothèse pourrait être violée em> être violée, je ne suis pas sûr de pouvoir tirer cela de mon chapeau aussi tard la nuit: -) P >
exécuter code>. Si c'est une méthode sur classe A code> si cela suppose qu'il est appelé par / sur le même thread? Peut-être que c'est une méthode sur une autre classe. Il semble donc probable que ce soit juste une meilleure pratique pour éliminer les bugs potentiels: votre code devient copie / pâte [@THOMAS a fait cette perspicacité également] P>
À partir de Java 5, il est Pas une bonne idée de travailler avec des threads directement . Vous devez plutôt utiliser un cadre exécutant et choisir une stratégie d'exécution en fonction de vos besoins. L'instance istinterrupted () code> méthode teste si ce fil a été interrompu. L'état interrompu du thread n'est pas affecté par cette méthode. L'intérieur isinterrupted () code> est en fait une méthode native. 906 public boolean isInterrupted() {
907 return isInterrupted(false);
908 }
Merci pour votre allusion. Nous utilisons également le cadre exécutant dans d'autres endroits et sommes venus à l'aimer.