安全的终止线程

文章目录

1、线程中断操作适合用来取消或停止任务

2、利用boolean变量控制需要停止任务并终止该线程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public static void main(String[] args) throws InterruptedException {

//线程中断取消任务
Runner one = new Runner();
Thread countThread = new Thread(one,"CountThread");
countThread.start();
TimeUnit.SECONDS.sleep(1);//睡眠1秒
//Main线程对CountThread进行中断,使CountThread能够感知中断而结束
countThread.interrupt();

//boolean变量控制取消任务
Runner two = new Runner();
countThread = new Thread(two,"CountThread");
countThread.start();
TimeUnit.SECONDS.sleep(1);//睡眠1秒
two.cancel();//Main线程对Runner Two进行取消,使CountThread能够感知on为false而结束
}

private static class Runner implements Runnable {
private long i;
private volatile boolean on = true;

public void run() {
while (on && !Thread.currentThread().isInterrupted()) {
i++;
}
System.out.println("i:"+i);
}

private void cancel() {
on = false;
}
}