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..." ); } }
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...
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) !