鼬佐 2016-01-19 05:27 采纳率: 40%
浏览 2652
已采纳

多线程的线程关闭问题

一段程序,线程一里面开了线程二,线程二里面又开了线程三和线程四,怎么在线程一继续执行的情况下,关闭线程二、三、四

  • 写回答

3条回答 默认 最新

  • 毕小宝 博客专家认证 2016-01-19 05:59
    关注

    首先,线程不存在关闭这种说法,线程是有生命周期的,线程一旦启动后,当它的run方法执行完成后,线程就会自动销毁的。
    其次,按你的描述,如果想让某个线程结束的话,就是让线程的run方法非正常结束。
    java的线程类Thread有interrupt()方法,可以让线程的启动者中断该线程,同时需要设计线程的run方法中能够响应中断异常。
    测试程序如下:

     /**
     * 线程一里面开了线程二,线程二里面又开了线程三和线程四,
     * 怎么在线程一继续执行的情况下,关闭线程二、三、四
     * 线程一:此处为main线程
     * 线程二:Thread2类型的线程
     * 线程三、四:Thread3类型的线程
     * @author 金涛
     *
     */
    public class ThreadInterruptTest {
    
        public static void main(String[] args) {
            Thread t1 = new Thread2();
            t1.start();
            //1秒后中断线程二
            try {
                Thread.sleep(1000);
                t1.interrupt();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            //main线程即线程一无限循环
            while(true){
    
            }
        }
    }
    
     /**
      * 线程二开启线程三、四
      * @author 金涛
      *
      */
     class Thread2 extends Thread{
    
        @Override
        public void run() {
            System.out.println("线程二启动成功");
            Thread3 t3 = new Thread3();
            Thread3 t4 = new Thread3();
            t3.start();
            t4.start();
            //线程继续的条件是没有外界线程中断该线程
            while(!this.isInterrupted()){
    
            }
            //外界中断了线程二的话,则线程二同时中断线程三、四
            t3.interrupt();
            t4.interrupt();
            System.out.println("线程二被外界中断而结束");
        }
    
    }
    
    class Thread3 extends Thread{
        public void run() {
            System.out.println("线程"+Thread.currentThread().getName()+"启动成功。");
            while(!this.isInterrupted()){
    
            }
            System.out.println("线程"+Thread.currentThread().getName()+"被外界中断而结束。");
        }
    }
    

    测试结果:线程一继续运行,而线程二、三、四都因为外界调用了interrupt操作而非正常结束。
    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?