【问题标题】:Java | Terminating all child threads if parent thread is terminated爪哇 |如果父线程终止,则终止所有子线程
【发布时间】:2014-12-09 06:14:48
【问题描述】:

请帮我解决这个问题 主线程/父线程将触发子线程。如果我们要停止父/主线程,它也必须停止所有子/子线程

我想用中断来做,但做不到 请帮我写代码

以及如何确保所有子线程都已停止?还有什么方法可以做到这一点

提前致谢!

我正在尝试做这样的事情:

公共类 ThreadTest1 扩展 Thread{ private static final Logger LOGGER = Logger.getLogger("mylogger");

public void run(){  


      for(int i=1;i<=5;i++){  
       try{  
           if (!Thread.currentThread().isInterrupted()) {
               LOGGER.log(Level.SEVERE,"Sleeping...");
               Thread.sleep(1000);
               LOGGER.log(Level.SEVERE,"Processing");
               System.out.println(Thread.currentThread().getId()+"Thread id:    "+i);  
           }
           else{
               throw new InterruptedException();
           }




       }catch(InterruptedException e){
           System.out.println(e);
           LOGGER.log(Level.SEVERE,"Exception", e);
           Thread.currentThread().interrupt();

       }  

      }  
     }  
    public static void main(String args[]){  

        ThreadTest1 t1=new ThreadTest1();  
        ThreadTest1 t2=new ThreadTest1();  
        ThreadTest1 t3=new ThreadTest1();  
        System.out.println(t1.getId());
        System.out.println(t2.getId());
        System.out.println(t3.getId());

        t1.start();  
        t2.start();  
        t3.start();
        System.out.println("Do you want to kill all processes: Press any key to continue");
        int s=0;
        try {
            s = System.in.read();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
            if(s!=0){

            t1.interrupt();
            t2.interrupt();
            t3.interrupt();
        }

            System.out.println(t1.isAlive());

     }  

}

【问题讨论】:

  • Please help me out with the code 哪个代码?你应该把你的代码放在这里,让其他人知道你在做什么。
  • 抱歉忘记添加之前/现在添加代码
  • 也许ThreadGroup 会有所帮助?如果将所有子线程放在同一个ThreadGroup 中,则可以将它们全部中断。子线程仍然需要定期检查来配合。
  • 谢谢@ajb 我会尝试用 Theadgroups 来做。即使我也不确定它是否可以与 Threadgroup 一起使用
  • 好的,感谢您发布代码...有什么症状?代码看起来应该杀死线程,但您在检查t1.isAlive 之前等待的时间不够长。中断将需要一些时间来处理。另外,您确定它可以识别输入吗?在许多系统上,如果您只是“按一个键”,输入将不会进入程序,直到您按 ENTER 或 RETURN。

标签: java eclipse multithreading exception


【解决方案1】:

Java 自动对线程进行分组。如果不定义特定的 ThreadGroup, 它将始终分组为发生初始化的线程的子线程。

所以如果你中止一个父线程,它的所有子线程也将被中止。

也许这会有所帮助(抱歉是德语):dpunkt programming pdf

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
  • 2014-03-12
  • 1970-01-01
  • 2011-02-19
  • 2020-10-09
相关资源
最近更新 更多