程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> java-多線程的線程關閉問題

java-多線程的線程關閉問題

編輯:編程解疑
多線程的線程關閉問題

一段程序,線程一裡面開了線程二,線程二裡面又開了線程三和線程四,怎麼在線程一繼續執行的情況下,關閉線程二、三、四

最佳回答:


首先,線程不存在關閉這種說法,線程是有生命周期的,線程一旦啟動後,當它的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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved