Interrupt 能够和 isInterrupted 配合使用打断正在执行的线程。
package com.yuxin.learn;
import java.io.IOException;
import java.util.Scanner;
import java.util.concurrent.ThreadPoolExecutor;
public class Main {
public static void main(String[] args) throws IOException{
System.out.println("线程"+Thread.currentThread().getId()+"进入线程");
Main test = new Main();
MyThread myThread = test.new MyThread();
myThread.start();
try {
Thread.currentThread().sleep(2000);
} catch (Exception e) {
// TODO: handle exception
}
myThread.interrupt();
}
class MyThread extends Thread{
@Override
public void run() {
System.out.println("线程"+Thread.currentThread().getId()+"进入线程");
int i=0;
//使用下面两种判断条件可以分别使线程 能够 和 不能够 被打断
while( !isInterrupted() &&i<Integer.MAX_VALUE){
// while(i<Integer.MAX_VALUE){
System.out.println(i+" :while循环");
i++;
}
if(i!=Integer.MAX_VALUE)
System.out.println("由于while循环加入了isInterrupted作为判断条件,线程被打断了。");
}
}
}
...
184208 :while循环
184209 :while循环
184210 :while循环
184211 :while循环
184212 :while循环
由于while循环加入了isInterrupted作为判断条件,线程被打断了。
但是一般情况下不建议通过这种方式来中断线程,一般会在MyThread类中增加一个属性 isStop来标志是否结束while循环,然后再在while循环中判断isStop的值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class
MyThread
extends
Thread{
private
volatile
boolean
isStop =
false
;
@Override
public
void
run() {
int
i =
0
;
while
(!isStop){
i++;
}
}
public
void
setStop(
boolean
stop){
this
.isStop = stop;
}
}
|
那么就可以在外面通过调用setStop方法来终止while循环。