问题描述
- 多线程的线程关闭问题
-
一段程序,线程一里面开了线程二,线程二里面又开了线程三和线程四,怎么在线程一继续执行的情况下,关闭线程二、三、四
解决方案
首先,线程不存在关闭这种说法,线程是有生命周期的,线程一旦启动后,当它的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操作而非正常结束。
解决方案二:
个人觉得可以在线程1中设置一个信号,在线程二中设置pthread-join,当你1发送结束信号的时候,三四线程pthread-exit掉自己,这个时候回到线程2
再pthread-exit自己,函数的中间的"-" 换成下划线,不过本人没尝试,不知道可以不可以
解决方案三:
好东西
时间: 2024-08-02 12:02:44