开发者社区> 问答> 正文

多线程的线程关闭问题

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

展开
收起
蛮大人123 2016-05-26 18:11:12 2116 0
2 条回答
写回答
取消 提交回答
  • 1、等待run方法的内容执行完毕,线程就退出了。 2、使用interrupt方法打断线程。 3、使用stop方法(废弃方法,不推荐,不安全)
    2019-07-17 19:16:46
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

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

     /**
     * 线程一里面开了线程二,线程二里面又开了线程三和线程四,
     * 怎么在线程一继续执行的情况下,关闭线程二、三、四
     * 线程一:此处为main线程
     * 线程二:Thread2类型的线程
     * 线程三、四:Thread3类型的线程
     *
     */
    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){
    
            }
        }
    }
    
     /**
      * 线程二开启线程三、四
      *
      */
     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操作而非正常结束。
    screenshot

    2019-07-17 19:16:45
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
多IO线程优化版 立即下载
多线程 立即下载
低代码开发师(初级)实战教程 立即下载

相关实验场景

更多