一段程序,线程一里面开了线程二,线程二里面又开了线程三和线程四,怎么在线程一继续执行的情况下,关闭线程二、三、四
首先,线程不存在关闭这种说法,线程是有生命周期的,线程一旦启动后,当它的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操作而非正常结束。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。