当前位置: 首页 > 知识库问答 >
问题:

Java |如果父线程终止,则终止所有子线程

蒋永宁
2023-03-14

请帮助我处理这个主线程/父线程将触发子线程。如果我们停止父线程/主线程,它还必须停止所有子线程/子线程

我想用中断做这件事,但做不到。请帮我把代码弄出来

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

提前谢谢!

我正在尝试这样做:

公共类ThreadTest1扩展Thread{私有静态最终记录器LOGGER=Logger.get记录器(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());

     }  

}

共有1个答案

侯英达
2023-03-14

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

因此,如果您中止父线程,其所有子线程也将被中止。

也许这会有帮助(很抱歉是德语):dpunkt编程pdf

 类似资料:
  • 主要内容:1 什么是Java终止线程,2 Thread类终止线程的方法,3 Java终止线程的例子1,4 Java终止线程的例子2,5 Java终止线程的例子3,6 isInterrupted和interrupted方法1 什么是Java终止线程 如果任何线程处于睡眠或等待状态(即,调用sleep()或wait()方法),则在线程上调用interrupt()方法,会抛出InterruptedException中断睡眠或等待状态。如果线程未处于睡眠或等待状态,则调用interrupt()方法将执行

  • 问题内容: 当我测试创建子线程的方法的执行时,JUnit测试会在子线程之前终止并杀死它。 我如何强制JUnit等待子线程完成其执行? 谢谢 问题答案: 阅读问题和评论后,似乎您需要的是 一种对异步操作进行单元测试的技术 。doSomething()立即返回,但是您希望测试代码等待其完成,然后进行一些验证。 问题在于该测试无法识别该调用所产生的线程,因此显然它无法等待它们。人们可以想到许多复杂的(可

  • 我正在尝试终止子线程,它正在等待来自服务器的输入。我尝试使用该标志进行操作,但它在上停止,因为它等待来自服务器的输入,并且只有在此输入之后才检查该标志并中断。但这不是一个好的解决方案,因为我无法阻止它没有服务器消息。我还尝试先检查标志,然后再检查readline(),但它也不起作用。有什么好的解决办法吗?

  • 问题内容: 我想使用它的ID终止线程。 使用下面的语句我得到线程。我正在维护的该线程ID ,但是每当使用要终止该线程时,我就有可能使用线程ID终止。 我该如何实现? 问题答案: 你可以这样

  • 我需要做一些多线程工作,并使用ExecutorService。newCachedThreadPool()并提交从队列中检索到的一些作业。 所以每个线程都创建一个的新实例,我在其中做一些工作。 我从另一个类调用我的,所以在提交所有作业后,我这样做: 但它只会杀死我的线程,即使工作没有完成,也没有等待。 也许是因为我在每个线程中创建了一个新的实例?