返回信息流public static void main(String[] args)
{
try
{
Thread thread = new Thread()
{
public void run()
{
}
};
thread.start();
Thread.sleep(1000);
thread.interrupt();
System.out.println(thread.isInterrupted());
}
catch(Exception e)
{
e.printStackTrace();
}
}
为什么打印出来的值为false,而把 Thread.sleep(1000);注释掉后打印的值为true
加不加 Thread.sleep(1000); 这个语句,整个程序执行流程是什么,求解答
这是一条镜像帖。来源:北邮人论坛 / java / #56019同步于 2017/4/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
java多线程 interrupt方法执行问题
ljq661
2017/4/19镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
Thread.sleep是让当前线程sleep,也就是main函数。而经过1s后thread已经执行结束了,对于已经执行结束的线程,isInterrupted方法返回false。
把sleep去掉后interrupt立刻执行,线程被中断,也就返回true了
不加sleep时,调用thread.interrupt();时可能线程还活着
加上sleep时,调用thread.interrupt();时线程已经结束了,可能这个方法不会修改一个已经结束的线程的中断标志位
试试下面这个吧
```Java
public static void main(String[] args)
{
try
{
Thread thread = new Thread()
{
public void run()
{
System.out.println(Thread.currentThread()+" 开始自旋");
while(!isInterrupted());
System.out.println(Thread.currentThread()+" 被中断,结束自旋");
}
};
thread.start();
Thread.sleep(1000);
thread.interrupt();
System.out.println(thread.isInterrupted());
}
catch(Exception e)
{
e.printStackTrace();
}
}
```
【 在 ljq661 的大作中提到: 】
: public static void main(String[] args)
: {
: try
: ...................