使用CountDownLatch使主线程等待所有子线程执行完,再继续执行。
public static void main(String[] args) throws InterruptedException {
t1();
t2();
}
private static long getTime() {
return System.currentTimeMillis();
}
public static void t3() {
long dd1 = System.currentTimeMillis();
while (getTime() - dd1 <= 10000) {
}
}
public static void t2() throws InterruptedException {
long d1 = System.currentTimeMillis();
int threadNumber = 10;
final CountDownLatch countDownLatch = new CountDownLatch(threadNumber);
for (int i = 0; i < threadNumber; i++) {
final int threadID = i;
new Thread() {
public void run() {
System.out.println("start" + threadID);
t3();
System.out.println("end" + threadID);
System.out.println(String.format(
"threadID:[%s] finished!!", threadID));
countDownLatch.countDown();
}
}.start();
}
countDownLatch.await();
System.out.println("main thread finished!!");
long d2 = System.currentTimeMillis();
System.out.println("time2:" + (d2 - d1));
}
public static void t1() throws InterruptedException {
long d1 = System.currentTimeMillis();
int threadNumber = 10;
for (int i = 0; i < threadNumber; i++) {
final int threadID = i;
Thread thread = new Thread() {
public void run() {
System.out.println("start" + threadID);
t3();
System.out.println("end" + threadID);
System.out.println(String.format(
"threadID:[%s] finished!!", threadID));
}
};
thread.start();
thread.join();
}
System.out.println("main thread finished!!");
long d2 = System.currentTimeMillis();
System.out.println("time1:" + (d2 - d1));
}
云游四方
分享到:
相关推荐
### Java多线程--让主线程等待所有子线程执行完毕 #### 核心知识点解析 在Java多线程环境中,让主线程等待所有子线程执行完毕是一个常见的需求,尤其是在处理大量数据或进行高性能计算时。这不仅有助于正确测量...
- **事件对象(Event)**:创建一个事件对象,子线程完成任务后设置事件状态,主线程等待该事件,接收到通知后处理数据。 - **消息队列(Message Queue)**:子线程可以通过PostMessage或SendMessage函数向主线程...
要解决“让主线程等待所有子线程执行完毕”的问题,可以采用以下策略: 1. 使用`join()`方法:如提到的,直接在每个子线程的`start()`之后调用`t.join()`,会导致所有线程按顺序执行。这是因为`join()`会让主线程...
Java 主线程等待子线程执行完毕 Java 中的多线程编程是非常重要的一部分,特别是在需要并发执行多个任务的情况下。然而,在某些情况下,我们需要等待所有子线程执行完毕后再继续执行主线程的剩余动作。这时,我们...
"主线程等待子多线程(无结果返回)执行完成再继续执行"这个主题就涉及到如何在Java、C#、Python等编程语言中实现这种同步机制。下面将详细讨论这个知识点。 **1. Java中的`Thread.join()`方法** 在Java中,主线程...
`Thread.join()`方法允许主线程等待一个特定的子线程执行完成。一旦调用了`join()`,主线程会被阻塞,直到被调用的线程执行完毕。例如: ```java Thread childThread = new Thread(() -> { // 子线程的代码 }); ...
要让主线程等待所有子线程执行完毕,但同时保持并发执行,我们可以使用一种协调机制来跟踪正在运行的子线程。上述描述中提到的方法是创建一个`ImportThread`类,它继承自`Thread`,并且维护一个`List`来存储所有正在...
本篇文章将深入探讨如何在Python中实现多线程,并让主线程等待所有子线程结束。 首先,我们需要了解Python中的`threading`模块,它是Python标准库中用于处理多线程的模块。在示例代码中,我们创建了两个函数`a()`和...
`Thread.join()`方法允许主线程等待特定线程结束。例如,如果有多个子线程,我们可以在每个子线程执行`join()`,这样主线程会依次等待每个子线程完成。例如: ```java Thread thread1 = new Thread(...); Thread ...
JAVA 主线程等待子线程执行完毕再执行 JAVA 中的线程控制是非常重要的一部分,而在实际开发中,我们经常会遇到需要主线程等待子线程执行完毕再执行的情况。这种情况下,我们可以使用两种方式来实现:主动式和被动式...
标题“子线程接收主线程发送的消息”涉及到的是Android中的Handler机制,这是一种处理线程间通信的方式。我们首先来详细解释一下Handler、Looper和Message这三个关键组件。 **Handler** 是一个消息处理对象,它与...
在父线程中,我们使用while循环来等待所有子线程退出,直到waitCount的值为0时,才继续执行下一步操作。 方法二:使用CountDownLatch 在第二个示例中,我们使用了CountDownLatch类来实现父线程等待所有子线程退出...
在Python中,我们可以通过以下方式确保主线程等待子线程执行完成: 1. 使用`join()`方法:主线程调用子线程对象的`join()`方法会阻塞,直到该子线程执行完毕。例如: ```python import threading def child_thread...
我在工作的过程中遇到一个问题,需要主线程等等所有子线程执行完后再做某件事情,在网上找了很多代码,都没有真正解决这个问题. 现在我解决了这个问题,把代码共享出来供大家参考. 代码中有注释和注意事项,相信大家看过...
// 等待子线程执行完成 } catch (InterruptedException e) { e.printStackTrace(); } childThread.start(); // 重新启动子线程 } } } ``` 在实际应用中,这种交替执行可能涉及到线程同步和通信,如使用`join...
对于多线程而言,一个主要的难题就是如何线程是否都已经执行结束。 也就是说,需要在主线程开启子多线程后,直到子线程全部执行结束为止,回到主线程。
在 Java 中,实现等待所有子线程结束后再执行一段代码是非常重要的,因为它可以确保主线程等待所有子线程完成任务后再继续执行。这篇文章将详细介绍 Java 实现等待所有子线程结束后再执行一段代码的方法。 ...
为解决这个问题,我们需要使用同步机制,如Java中的`join()`方法或C#的`Thread.Join()`,让主线程等待所有子线程完成后再继续执行。当调用`join()`方法时,主线程会被阻塞,直到被调用的线程执行完毕。 例如,在...
为了解决这个问题,我们可以利用Qt提供的多线程机制,将耗时操作转移到子线程执行,以确保主线程能够保持对UI的及时更新。以下将详细讲解如何在Qt中使用多线程防止界面假死,并给出一种有效的方法。 1. Qt中的线程...
`Invoke`方法允许我们在非UI线程上执行一个委托,确保该委托在创建控件的线程(即主线程)上运行。这使得我们可以安全地修改UI控件的属性。 下面是一个使用Invoke方法的示例: ```csharp private void button6_...