Maison > Java > javaDidacticiel > Comment interrompre un thread en cours d'exécution en Java (2)

Comment interrompre un thread en cours d'exécution en Java (2)

黄舟
Libérer: 2016-12-30 13:20:55
original
1519 Les gens l'ont consulté

Utilisez Thread.interrupt() pour interrompre un thread

Comme décrit dans le listing A, la méthode Thread.interrupt() n'interrompt pas un thread en cours d'exécution. Ce que cette méthode accomplit réellement, c'est de lancer un signal d'interruption lorsque le thread est bloqué, afin que le thread puisse sortir de l'état bloqué. Pour être plus précis, si le thread est bloqué par l'une des trois méthodes Object.wait, Thread.join et Thread.sleep, il recevra alors une exception d'interruption (InterruptedException), mettant ainsi fin prématurément à l'état bloqué.

Par conséquent, si le thread est bloqué par les méthodes ci-dessus, la bonne façon d'arrêter le thread est de définir la variable partagée et d'appeler interrompu() (notez que la variable doit être définie en premier). Si le thread n'est pas bloqué, l'appel d'interruption() n'aura aucun effet ; sinon, le thread obtiendra une exception (le thread doit être prêt à gérer cette situation à l'avance) puis sortira de l'état bloqué. Dans les deux cas, le thread finira par vérifier la variable partagée puis s'arrêtera. Le listing C est un exemple qui décrit cette technique.

Listing C
class Example3 extends Thread {
  volatile boolean stop = false;
  public static void main( String args[] ) throws Exception {
   Example3 thread = new Example3();
   System.out.println( "Starting thread..." );
   thread.start();
   Thread.sleep( 3000 );
   System.out.println( "Asking thread to stop..." );
   thread.stop = true;//如果线程阻塞,将不会检查此变量
   thread.interrupt();
   Thread.sleep( 3000 );
   System.out.println( "Stopping application..." );
   //System.exit( 0 );
  }
  public void run() {
    while ( !stop ) {
     System.out.println( "Thread running..." );
      try {
      Thread.sleep( 1000 );
      } catch ( InterruptedException e ) {
      System.out.println( "Thread interrupted..." );
      }
    }
   System.out.println( "Thread exiting under request..." );
  }
}
Copier après la connexion

Une fois Thread.interrupt() dans le listing C appelé, le thread reçoit une exception, échappe à l'état bloqué et détermine qu'il doit s'arrêter. L'exécution du code ci-dessus obtiendra le résultat suivant :

Starting thread...
Thread running...
Thread running...
Thread running...
Asking thread to stop...
Thread interrupted...
Thread exiting under request...
Stopping application...
Copier après la connexion

Ce qui précède explique comment interrompre un thread en cours d'exécution (2) en Java. Pour plus de contenu connexe, veuillez faire attention au site Web chinois PHP. (www.php.cn) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal