关于线程中断的疑问。
测试代码如下:
执行结果如下:
中断之前- false
主线程--true
a线程-- false
主线程--false
a线程-- false
...
之后的打印全是false,文档中说线程中断后调用isInterrupted会返回true,现在返回了false,这说明在线程遇到wait、sleep等阻塞类型方法的时候只会将其线程从执行状态改变为中断状态并发出一个InterruptedException 异常,并不会改变其标志该线程是否正在执行的布尔类型变量。但是在执行结果中可以看到在主线程中打印出一个true。请教大家,为什么会有这样的结果?
public class testThread {
Thread t = null;
public void setT(Thread t) {
this.t = t;
}
class threadA implements Runnable{
private void paint() {
for(int i = 0; i < 20; i ++) {
System.out.println("a线程-- " + t.isInterrupted());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void run() {
synchronized (this) {
try {
this.wait(5000);
} catch (InterruptedException e) {
paint();
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
testThread test = new testThread();
Thread t = new Thread(test.new threadA());
test.setT(t);
t.start();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("中断之前- " + t.isInterrupted());
t.interrupt();
for(int i = 0; i < 20; i ++) {
System.out.println("主线程--" + t.isInterrupted());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
执行结果如下:
中断之前- false
主线程--true
a线程-- false
主线程--false
a线程-- false
...
之后的打印全是false,文档中说线程中断后调用isInterrupted会返回true,现在返回了false,这说明在线程遇到wait、sleep等阻塞类型方法的时候只会将其线程从执行状态改变为中断状态并发出一个InterruptedException 异常,并不会改变其标志该线程是否正在执行的布尔类型变量。但是在执行结果中可以看到在主线程中打印出一个true。请教大家,为什么会有这样的结果?
...全文
相关推荐
多线程传输文件
另外,错误处理和异常处理也是必不可少的,比如线程安全地终止、处理传输中断等。
多线程(姐姐监督弟弟做作业)
在单线程环境中,程序的执行是顺序的,即一次只能做一件事。但在多线程环境中,程序可以同时处理多个任务,比如弟弟的线程可以执行做作业的操作,而姐姐的线程则可以执行检查作业、解答疑问等操作。
关于操作系统的一些疑问和总结
在这个文档中,我们将深入探讨操作系统的一些关键概念、工作原理以及常见疑问。
Java如何中断一个正在运行的线程
Java如何中断一个正在运行的线程 Java中的线程中断是指在某个线程完成任务之前停止其正在进行的一切,有效地中止其当前的操作。这种操作可能会使线程死亡、等待新的任务或是继续运行至下一步。
浅谈Java线程Thread之interrupt中断解析
通过调用Thread.interrupt()方法,可以设置线程的中断状态位,线程会不时地检测这个中断标示位,以判断线程是否应该被中断。


Java SE
