package com.jackson.deng.concurrent.chapter1.three;
import java.util.concurrent.TimeUnit;
/**
* 从这里可以看出两种实现线程方法还是有不同的<br>
* extends Thread 可以调用一些参数和方法,详见源代码<br>
* implements Runnable 只有覆盖run方法,没有调用参数<br>
*
* 应用场景:
* 类似有个线程开启的任务,当有某种情况下需要中断此线程,可以考虑
*
* @author jackson
*
*/
public class ThreadInterrupt {
public class PrimeGenerator extends Thread {
private long number = 1L;
/**
* 不停生成素数的方法
*/
@Override
public void run() {
while (true) {
if (isPrime(number)) {
System.out.println("Number " + number + " is a prime");
}
//如果线程中断,则结束程序
if (isInterrupted()) {//extends Thread才有的方法
System.out.println("The Prime Generator is interrupted");
return;
}
number++;
}
}
}
private boolean isPrime(long num) {
if (num <= 2) {
return true;
} else {
for (long i = 2; i < num; i++) {
if (num % i == 0) {
return false;
}
}
}
return true;
}
public static void main(String[] args) {
ThreadInterrupt ti = new ThreadInterrupt();
Thread task = ti.new PrimeGenerator();
task.start();
try {
//等5秒
TimeUnit.SECONDS.sleep(5);
//打断素数生成的线程
task.interrupt();
} catch (Exception e) {
e.printStackTrace();
}
}
}
打印结果: