public class Interrupt {
public static void main(String[] args) {
Thread thread = new Thread(new WorkTask());
thread.start();
System.out.println("主线程执行了");
try {
Thread.sleep(2000);
thread.interrupt();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class WorkTask implements Runnable{
@Override
public void run() {
System.out.println("自定义线程执行了....");
try {
Thread.sleep(5000);
//当捕获到InterruptException时会清楚掉中断标记
} catch (InterruptedException e) {
Thread thread = Thread.currentThread();
//非静态方法isInterrupted方法不会清除中断标记
/*public boolean isInterrupted() {
* 不会清除中断标记
return isInterrupted(false);
}*/
System.out.println("自定义线程的状态 isInterrupt:" + thread.isInterrupted());
System.out.println("自定义线程的状态 isInterrupt:" + thread.isInterrupted());
System.out.println("重新设置打断标志...");
thread.interrupt();
System.out.println("自定义线程的状态isInterrupt:" + thread.isInterrupted());
//静态方法interrupted方法会清除中断标记
/*public static boolean interrupted() {
return currentThread().isInterrupted(true);
}
@Param ClearInterrupted 清除中断标记
private native boolean isInterrupted(boolean ClearInterrupted);
*/
System.out.println("自定义线程的状态interrupt:" + Thread.interrupted());
System.out.println("自定义线程的状态interrupt:" + Thread.interrupted());
System.out.println("自定义线程的状态isInterrupt:" + thread.isInterrupted());
}
}
}
执行结果:
主线程执行了
自定义线程执行了....
自定义线程的状态 isInterrupt:false
自定义线程的状态 isInterrupt:false
重新设置打断标志...
自定义线程的状态isInterrupt:true
自定义线程的状态interrupt:true
自定义线程的状态interrupt:false
自定义线程的状态isInterrupt:false
注:1.在线程调用interrupt()方法的时候,线程并不会主动中断,需要在代码中判断线程的中断状态
2.interrupted()方法 查询的时currentThread的状态而 isInterrupted()方法是this线程不是静态方法
public class InterruptDemo2 {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(new ThreadTask());
thread.start();
System.out.println("主线程执行了...");
Thread.sleep(300);
thread.interrupt();
}
}
class ThreadTask implements Runnable{
@Override
public void run() {
//手动判断当前线程的中断状态
while(!Thread.interrupted()) {
System.out.println("自定义线程执行了...");
}
}
}