`
rodneytt
  • 浏览: 11586 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

主线程等待所有子线程执行完成

    博客分类:
  • java
阅读更多
使用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多线程--让主线程等待所有子线程执行完毕 #### 核心知识点解析 在Java多线程环境中,让主线程等待所有子线程执行完毕是一个常见的需求,尤其是在处理大量数据或进行高性能计算时。这不仅有助于正确测量...

    如何从子线程更新主线程数据

    - **事件对象(Event)**:创建一个事件对象,子线程完成任务后设置事件状态,主线程等待该事件,接收到通知后处理数据。 - **消息队列(Message Queue)**:子线程可以通过PostMessage或SendMessage函数向主线程...

    Java多线程–让主线程等待所有子线程执行完毕

    要解决“让主线程等待所有子线程执行完毕”的问题,可以采用以下策略: 1. 使用`join()`方法:如提到的,直接在每个子线程的`start()`之后调用`t.join()`,会导致所有线程按顺序执行。这是因为`join()`会让主线程...

    Java主线程等待子线程执行完毕

    Java 主线程等待子线程执行完毕 Java 中的多线程编程是非常重要的一部分,特别是在需要并发执行多个任务的情况下。然而,在某些情况下,我们需要等待所有子线程执行完毕后再继续执行主线程的剩余动作。这时,我们...

    主线程等待子多线程(无结果返回)执行完成再继续执行

    "主线程等待子多线程(无结果返回)执行完成再继续执行"这个主题就涉及到如何在Java、C#、Python等编程语言中实现这种同步机制。下面将详细讨论这个知识点。 **1. Java中的`Thread.join()`方法** 在Java中,主线程...

    Java简单实现“主线程等待所有子线程完成再继续”

    `Thread.join()`方法允许主线程等待一个特定的子线程执行完成。一旦调用了`join()`,主线程会被阻塞,直到被调用的线程执行完毕。例如: ```java Thread childThread = new Thread(() -&gt; { // 子线程的代码 }); ...

    Java多线程--让主线程等待所有子线程执行完毕在执行

    要让主线程等待所有子线程执行完毕,但同时保持并发执行,我们可以使用一种协调机制来跟踪正在运行的子线程。上述描述中提到的方法是创建一个`ImportThread`类,它继承自`Thread`,并且维护一个`List`来存储所有正在...

    Python多线程:主线程等待所有子线程结束代码

    本篇文章将深入探讨如何在Python中实现多线程,并让主线程等待所有子线程结束。 首先,我们需要了解Python中的`threading`模块,它是Python标准库中用于处理多线程的模块。在示例代码中,我们创建了两个函数`a()`和...

    Java多线程--等待所有子线程执行完的五种方法.docx

    `Thread.join()`方法允许主线程等待特定线程结束。例如,如果有多个子线程,我们可以在每个子线程执行`join()`,这样主线程会依次等待每个子线程完成。例如: ```java Thread thread1 = new Thread(...); Thread ...

    JAVA主线程等待子线程执行完毕再执行[参照].pdf

    JAVA 主线程等待子线程执行完毕再执行 JAVA 中的线程控制是非常重要的一部分,而在实际开发中,我们经常会遇到需要主线程等待子线程执行完毕再执行的情况。这种情况下,我们可以使用两种方式来实现:主动式和被动式...

    子线程接收主线程发送的消息

    标题“子线程接收主线程发送的消息”涉及到的是Android中的Handler机制,这是一种处理线程间通信的方式。我们首先来详细解释一下Handler、Looper和Message这三个关键组件。 **Handler** 是一个消息处理对象,它与...

    Java父线程(或是主线程)等待所有子线程退出的实例

    在父线程中,我们使用while循环来等待所有子线程退出,直到waitCount的值为0时,才继续执行下一步操作。 方法二:使用CountDownLatch 在第二个示例中,我们使用了CountDownLatch类来实现父线程等待所有子线程退出...

    python爬虫-08-主线程会等待子线程执行结束再结束.ev4.rar

    在Python中,我们可以通过以下方式确保主线程等待子线程执行完成: 1. 使用`join()`方法:主线程调用子线程对象的`join()`方法会阻塞,直到该子线程执行完毕。例如: ```python import threading def child_thread...

    主线程等待子线程结束代码

    我在工作的过程中遇到一个问题,需要主线程等等所有子线程执行完后再做某件事情,在网上找了很多代码,都没有真正解决这个问题. 现在我解决了这个问题,把代码共享出来供大家参考. 代码中有注释和注意事项,相信大家看过...

    子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。

    // 等待子线程执行完成 } catch (InterruptedException e) { e.printStackTrace(); } childThread.start(); // 重新启动子线程 } } } ``` 在实际应用中,这种交替执行可能涉及到线程同步和通信,如使用`join...

    主线程等待子线程结束

    对于多线程而言,一个主要的难题就是如何线程是否都已经执行结束。 也就是说,需要在主线程开启子多线程后,直到子线程全部执行结束为止,回到主线程。

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

    在 Java 中,实现等待所有子线程结束后再执行一段代码是非常重要的,因为它可以确保主线程等待所有子线程完成任务后再继续执行。这篇文章将详细介绍 Java 实现等待所有子线程结束后再执行一段代码的方法。 ...

    多线程执行完后主程序再执行(包括需要子线程返回结果)

    为解决这个问题,我们需要使用同步机制,如Java中的`join()`方法或C#的`Thread.Join()`,让主线程等待所有子线程完成后再继续执行。当调用`join()`方法时,主线程会被阻塞,直到被调用的线程执行完毕。 例如,在...

    qt 多线程 防止主线程做循环操作导致界面假死

    为了解决这个问题,我们可以利用Qt提供的多线程机制,将耗时操作转移到子线程执行,以确保主线程能够保持对UI的及时更新。以下将详细讲解如何在Qt中使用多线程防止界面假死,并给出一种有效的方法。 1. Qt中的线程...

    C#子线程更新UI控件的方法实例总结

    `Invoke`方法允许我们在非UI线程上执行一个委托,确保该委托在创建控件的线程(即主线程)上运行。这使得我们可以安全地修改UI控件的属性。 下面是一个使用Invoke方法的示例: ```csharp private void button6_...

Global site tag (gtag.js) - Google Analytics