花公子丶 2016-08-12 08:29 采纳率: 50%
浏览 1048
已结题

关于Java线程的isInterrupted方法问题

我调用interrupt方法中断线程后,isInterrupted仍然为false。看代码第二个注释处

 public class InterruptThread
{
    public static void main(String[] args) {

        Mythread mythread= new Mythread();
        mythread.start();
        try {
            Thread.sleep(10000);//主线程休眠十秒,让子线程执行十秒,然后中断mythread子线程
            mythread.interrupt();
            Thread.sleep(3000);
            //明明调用了mythread.interrupt(),下面这句却还是false,这是为何?
            System.out.println("线程是否已经中断:"+mythread.isInterrupted());
            System.out.println("线程是否已经中断:"+mythread.interrupted());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
class Mythread extends Thread{
    @Override
    public void run(){
        try {
            while(true){
                interruptableMethod();
            }
        } 
        catch (InterruptedException e) {
            System.out.println(Thread.currentThread().getName()+"线程中断了");
        }
    }

    public void interruptableMethod() throws InterruptedException{
        System.out.println("方法开始执行");
        sleep(2000);
        System.out.println("方法结束");
    }
}

  • 写回答

3条回答 默认 最新

  • 刘兆贤 博客专家认证 2016-08-24 03:32
    关注

    interrupt不一样能成功,而且thread目前也不建议,最好在线程中加入volatile变量来控制关闭,最次可以使用wait方法。

    评论

报告相同问题?

悬赏问题

  • ¥15 luckysheet
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误