一段程序,線程一裡面開了線程二,線程二裡面又開了線程三和線程四,怎麼在線程一繼續執行的情況下,關閉線程二、三、四
首先,線程不存在關閉這種說法,線程是有生命周期的,線程一旦啟動後,當它的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操作而非正常結束。