...
package com.test.theread;
import org.junit.Test;
/**
*
*
*/
public class TestInterrupt{
@Test
public void test() throws Exception{
//这里创建一个线程
TestThread t1 = new TestThread("t1");
t1.start();
Thread.sleep(2000);
//停止线程,这里调用interrupt方法,调用时不会像Thread.stop()方法一样暴力的终止线程,这里标记线程是终止状态的但是还是会继续运行
t1.interrupt();
}
private class TestThread extends Thread{
public TestThread(String name){
setName(name);
}
@Override
public void run() {
try {
for(int i = 0; i < 1000000; i++){
//这里判断线程是否停止状态,是的话直接抛出异常来终止线程
if(this.interrupted()){
System.out.println("线程中断退出");
throw new InterruptedException("线程为中断状态,防止继续执行后面代码,抛出异常");
}
System.out.println(i);
}
System.out.println("虽然中断线程但是继续执行");
} catch (InterruptedException e) {
//log.....
e.printStackTrace();
}
}
}
}