一段程序,线程一里面开了线程二,线程二里面又开了线程三和线程四,怎么在线程一继续执行的情况下,关闭线程二、三、四
3条回答 默认 最新
关注 首先,线程不存在关闭这种说法,线程是有生命周期的,线程一旦启动后,当它的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操作而非正常结束。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥17 pro*C预编译“闪回查询”报错SCN不能识别
- ¥15 微信会员卡接入微信支付商户号收款
- ¥15 如何获取烟草零售终端数据
- ¥15 数学建模招标中位数问题
- ¥15 phython路径名过长报错 不知道什么问题
- ¥15 深度学习中模型转换该怎么实现
- ¥15 Stata外部命令安装问题求帮助!
- ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
- ¥15 TYPCE母转母,插入认方向
- ¥15 如何用python向钉钉机器人发送可以放大的图片?