有多个执行线程的 Java 程序只在所有线程执行结束后才结束(更明确地说, 是当所有非守护线程执行结束或其中一个线程调用了System.exit()方法). 有时需要主动结束一个线程, 如希望结束一个程序或用户想取消线程在做的任务时.
Java提供了中断机制以告知一个线程我们想结束它了。此机制的一个特质是线程必须检查它是否被中断并能决定是否响应析构请求。线程可以忽略并继续执行。
线程类 (PrimeGenerator): 生成并打印质数
@Override public void run() { long number = 1L; while (true) { if (isPrime(number)) { System.out.printf("Number %d is Prime\n", number); } // 判断是否中断 (见后述代码段) number++; } }
if (isInterrupted()) { System.out.printf("The Prime Generator has been Interrupted\n"); return; }
private boolean isPrime(long number) { if (number <= 2) { return true; } for (long i = 2; i < number; i++) { if ((number % i) == 0) { return false; } } return true; }
控制类 (Main)
Thread task = new PrimeGenerator(); task.start();
try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } task.interrupt();