标记 停止线程
class StopRunnable implements Runnable{
public boolean isOver = false;
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "...run");
}
}
}
public static void main(String[] args) {
StopRunnable stopRunnable = new StopRunnable();
Thread t = new Thread(stopRunnable);
t.start();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
t.interrupt();
System.out.println("利用标记停止线程");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主线程结束");
}
测试结果:不能结束子线程
interrupt()方法
设置 isInterrupted 布尔值
如果线程中 有wait()等待 或者 sleep 休眠
这时调用interrupt方法
会抛出一个异常InterruptedException
并且清除中断状态
如果线程中没有等待 或 休眠
这时调用interrupt方法
会设置中断状态(true/false的改变)
Interrupt
线程的中断状态
线程等待 放弃了cpu的执行资源
interrupt 方法 尽量不要使用
如果要停止线程 直接使用 标记法
只有遇到了等待状态 时 可以使用该方法
强行清除该方法
class InterruptThread extends Thread{
public boolean isOver = false;
@Override
public synchronized void run() {
while (true) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "...run" );
}
}
}