当前位置: 首页 > 编程笔记 >

Java实现等待所有子线程结束后再执行一段代码的方法

陶福
2023-03-14
本文向大家介绍Java实现等待所有子线程结束后再执行一段代码的方法,包括了Java实现等待所有子线程结束后再执行一段代码的方法的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了Java实现等待所有子线程结束后再执行一段代码的方法。分享给大家供大家参考,具体如下:

今天有一个需求是:在一个方法中开启了一个子线程来执行操作,返回值依赖于子线程的执行结果,这样如果要返回正确的值,就需要开启子线程后

主线程等待子线程,然后子线程执行结束后,主线程再继续执行。

主线程等待子线程需要用到:CountDownLatch

代码如下:

import java.util.concurrent.CountDownLatch;
public class Counter {
  public static int count = 0;
  static CountDownLatch cdl=new CountDownLatch(1000);//这里的数字,开启几个线程就写几
  public synchronized static void inc() throws InterruptedException{//注意,如果不加上synchronized,由于并发写入,结果会小于1000
    Thread.sleep(1);
    count++;
    cdl.countDown();
  }
  public static void main(String[] args) throws InterruptedException{
    for(int i = 0; i < 1000; i++){
      new Thread(new Runnable(){
        public void run() {
          // TODO Auto-generated method stub
          try {
            Counter.inc();
          } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
        }
      }
      ).start();
    }
    cdl.await();//主线程等待子线程执行输出
    System.out.println(count);
  }
}

更多java相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

 类似资料:
  • 问题内容: 这是我的代码段。 现在做完之后 我要在这里实现的是,我要等待线程池中的所有线程完成执行,然后关闭执行器。 但是我想这不是这里正在发生的事情。主线程似乎正在执行关闭,它只是关闭了所有内容。 在我的线程池大小为2之前,我做了以下事情,而且似乎可行。 我如何在线程池中使用更多线程?谢谢。 问题答案: 您通常使用以下成语: 只是说执行者不会接受新工作。 等待直到所有已提交的任务完成它们的工作(

  • 在进行下一步之前,我想从我的on完成函数中得到一个布尔值。 我的问题是,当代码到达布尔值(isLoginSucces)对代码至关重要的部分时,它会得到唯一的假值,因为onComplete函数没有到达更改布尔值的点。 我尝试了异步函数,但它不起作用,也尝试了原子布尔,也不起作用。 在那之后,我把线放平了。睡眠(10000)。在这段时间(10秒)内,它肯定改变了值,但不要工作太多,仍然是错误的,我不明

  • 问题内容: 我正在尝试为UIImageView设置动画,然后在动画完成后隐藏图像视图。但是,在动画完成之前imageview被隐藏了。我看过类似的问题,他们建议在完成后在动画代码中实现动画侦听器或执行.hidden代码,但是我不确定如何在下面的shockView()函数中影响此效果。 仅在动画完成后,如何显示摇动动画并隐藏图像视图? 使用以下代码调用动画: 动画功能本身如下所示: 问题答案: 动画

  • 本文向大家介绍C#实现程序等待延迟执行的方法,包括了C#实现程序等待延迟执行的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现程序等待延迟执行的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 我想在C#中处理子目录和文件的文件系统/文件夹。我正在使用TPL库中的任务。这个想法是递归地执行它并为每个文件夹创建一个任务。主线程应该等待子线程完成,然后打印一些信息。事实上我只是想知道扫描何时完成。我已经开始使用线程池,然后切换到TLP。做了一些简单的例子。经过一些尝试从简单的代码到越来越臃肿的代码我被困在这里: 主线程有时仍然过早地继续,而不是在完成所有其他线程之后继续。(我对C#比较陌生,

  • 我打算在主线程中启动2个线程,主线程应该等到所有2个子线程完成,我就是这样做的。 在上面的代码中,确实让主线程等待子线程,但问题是,在第一个线程完成之前不会创建第二个线程。这不是我想要的。 我想要的是,这两个线程立即在主线程中创建,然后主线程等待它们完成。似乎做不到,是吗? 我想,也许我可以通过一个信号灯来完成这项工作,但还有别的方法吗?