Java利用一种中断机制来向线程表明想要终止它。这个中断机制依赖线程工具来检讨是否须要中断,同时线程工具可以决定是否相应中断要求。当然,一个线程工具也可以忽略中断要求连续实行。
本节将开拓一个运用程序,它的浸染是在线程创建5s后,利用中断机制逼迫结束线程。
项目准备

本案例是用Eclipse IDE来实现的。如果开拓者利用Eclipse或者其他IDE (例如NetBeans ) ,则应打开它并创建一个新的Java项目。
案例实现
根据以下步骤来完本钱案例。
1,创建一个名为PrimeGenerator 的类,并继续Thread类:
public class PrimeGenerator extends Thread{
2.重写run()方法——该方法包含一个无限while 循环。在循环中,处理从1开始的连续数字。如果是奇数,那么将其输出到掌握台:
@Overridpublic void run() {long number=1L;while (true) {if (isPrime(number)) {System.out.printf("Number %d is Prime\n", number);}
3,每处理完一个数字,通过isInterrupted()方法来判断当前哨程是否已被中断。如果该方法返回true ,那么表明当前哨程已被中断。在这种情形下,在掌握台上打印一条信息并终止线程:
if (isInterrupted())System.out.printf ("The Prime Generator has been Interrupted");return;}number++;}}
4,实现isPrime()方法。详细代码拜会1.2节。
5,现在,开始实现运用程序的主类,创建包含main()法的Main类:
public class Main{public static void main(string[] args) t
6,创建PrimeGenerator类的工具,并启动它:
Thread task=new PrimeGenerator();task.start()
7·在主线程中等待5s后,中断PrimeGenerator线程:
try{Thread.sleep(5000);}catch (InterruptedException e) {e.printstackTrace();}task.interrupt();
8,输出中断线程的状态。这段代码的输出结果取决于它是在线程结束前还是线程结束后运行的:
System.out, printf("Main: status of the Thread: %s\n",task,getstate());System.out, printf("Main: isInterrupted: %s\n",task.isInterrupted());System.out, printf("Main: isAlive: %s\n", task,isAlive());}
9,运行案例并查当作果。
结果剖析
下面因此上案例运行结果的截图。从图中可以看到, PrimeGenerator线程在检测到自己被中断后,输出信息并结束了运行。
Thread类有一个用来保存线程是否已被中断的状态属性,其属性值为 boolean类型,默认值为false 。当调用一个线程工具的interrupt()方法时,该状态属性将修正为true 。而方法isInterrupted() 仅返回该状态属性的值。
在main()方法中,输出了中断线程的一些状态信息。在本案例中,虽然在这些代码之前调用了线程的中断,但是在实行这些代码时,任务线程并未实行到中断判断和处理过程,因此,此时输出的线程状态为RUMMABL E ,方法 isInterrupted()的结果为 true ,当然方法isAlive() 的结果也为true 。如果这些代码实行是在Thread中断完成之后[可以制造机会,如通过在main调用sleep() 使得主线程休眼1s,使得task 线程完成中断,那么 isInterrupted )和 isAlive() 的结果将为false 。.
其他解释
在Thread类中,还有一个静态办法interrupted(),也能用来检测当前哨程是否已被中断。
正如前文所说,线程工具可以忽略中断,但这并不是被预期的行为。
本文节选自《Java 9 并发编程实战》
本书将带你理解所有的新API,向您展示如何构建并行多线程运用程序。这本书涵盖了所有Java并发API的元素,包括基本配方,这些帮助您利用激动民气的新功能。您将学习如何利用并行和反应流来处理大规模数据集。接下来,您将连续创建流,并利用他们所有中间和终真个操作以一种并行且函数性的办法来进行数据的网络。此外,你会理解一系列的实战办法,如线程管理、同步、实行人、并行和反应流等。