8
votes

Pourquoi utiliser le fil.CurrentThread (). Isinterrupted () au lieu d'Isinterrupted ()?

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()) {
   [...]
}


0 commentaires

4 Réponses :


18
votes

Dans votre cas, il suffit d'appeler ! IsInterrupted () car vous s'étendez à partir de la classe de la classe . Généralement, vous n'allez pas de thread - c'est pourquoi vous appelez thread.currentThread () .


2 commentaires

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 aussi, je soupçonne que c'est l'un de ces deux, probablement ce dernier.



1
votes

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.


0 commentaires

2
votes

Le Annuler est clair: il dirige efficacement l'appel sur ceci.Interrupt ; I.e l'instance de thread à laquelle la méthode annule est appliquée.

comme pour la méthode , tout ce que vous avez affiché a du sens sur l'hypothèse que la méthode Exécuter a été appelée et appelée uniquement, par l'instance (attendue) de classe A . 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 être violée, je ne suis pas sûr de pouvoir tirer cela de mon chapeau aussi tard la nuit: -)

considérer une méthode autre que exécuter . Si c'est une méthode sur classe A 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]


0 commentaires

4
votes

À 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     }


1 commentaires

Merci pour votre allusion. Nous utilisons également le cadre exécutant dans d'autres endroits et sommes venus à l'aimer.