java 主线程调用子线程后 可以用join的方式等待子线程返回, 再继续。
也可以用CompletionService 的take().get() 方法得到返回结果后再继续。
ExecutorService es = Executors.newFixedThreadPool(10);
CompletionService<List<StatisticErrorBean>> cs = new ExecutorCompletionService<List<StatisticErrorBean>>(
es);
for (int i = 0; i < urlFolderList.size(); i++) {
cs.submit(new ConsumerErrorTask(urlFolderList.get(i).getUrl(), urlFolderList.get(i).getFolder(), reportMinus1, reportAdd1, reportS, this));
}
for (int i = 0; i < urlFolderList.size(); i++) {
List<StatisticErrorBean> list = cs.take().get();
if(list == null){
logger.debug("list is null");
continue;
}
combineList(resultList, list);
}
es.shutdown();
如果不需要等待子线程的结果的话,main线程可以直接结束, 子线程还会继续运行。
如果需要设置当main线程结束时, 子线程也停止。 可以将子线程设置成守护线程daemon。
public class Test extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("test");
}
}
public static void main(String[] args) throws InterruptedException {
Test test=new Test();
//test.setDaemon(true);//Of course.if set daemon thread. the child thread will exit
test.start();
Thread.sleep(3000);
System.out.println("return");
return;
}
}
分享到:
相关推荐
子线程与主线程之间的通信方式有很多种,如使用共享变量、wait/notify机制、Future和Callable接口等。而观察者模式(Observer Pattern)则是一种设计模式,它允许一个对象的状态变化自动通知其他依赖该对象的对象。...
在多线程编程中,"子线程更新主线程数据"是一个常见的需求,尤其是在UI界面交互和后台处理相结合的应用中。主线程通常负责用户界面的显示与交互,而子线程则用于执行耗时的任务,避免阻塞主线程,提供良好的用户体验...
子线程任务发生异常,主线程事务如何回滚? 本文将详细探讨当子线程任务发生异常时,如何让主线程捕获到该异常并进行事务的回滚。下面将从多线程编程的基础知识、线程池的使用、异常捕获三个方面进行阐述。 一、多...
本文将深入探讨如何在Android环境中实现两个子线程之间的通信。 首先,理解Android线程模型至关重要。主线程,也称为UI线程,负责处理用户界面的更新和事件响应。为了不阻塞主线程,我们通常会在子线程中执行耗时...
本示例将深入探讨如何在Java或C#等支持多线程的编程语言中,安全地从子线程操作主线程。 首先,我们需要理解线程同步的概念。在多线程环境中,为了防止数据竞争和确保线程安全,我们需要使用同步机制,如锁、信号量...
在Android应用开发中,UI线程(也称为主线程)负责处理用户交互和绘制界面,而子线程通常用于执行耗时操作,如网络请求、数据处理等。由于Android系统的安全机制,直接在子线程中修改UI是不允许的,因此我们需要通过...
在所有子线程启动后,我们使用 runningThreadNum.await() 等待所有子线程执行完毕。当所有子线程执行完毕后,计数器将减到零,于是 await 方法将返回,我们可以继续执行主线程的剩余动作。 使用 CountDownLatch 类...
主线程主要负责处理用户界面和事件,而子线程通常用于执行耗时的操作,如网络请求或数据库操作。由于Android的UI操作必须在主线程中进行,因此在子线程中直接修改ProgressDialog的状态会导致应用崩溃或出现未定义的...
主线程,也称为UI线程,负责处理用户界面的更新和事件响应,而子线程通常用于执行耗时操作,如网络请求、数据处理等,以避免阻塞主线程导致应用无响应。以下是对标题和描述中提到的五种子线程与主线程交互方式的详细...
基于Java子线程中的异常处理方法(通用) 在Java子线程中处理异常是一个非常重要的主题,因为在并发情况下,捕获和处理异常变得更加复杂。本文将探讨如何在父线程中捕获来自子线程的异常,并提供三种常用方法来解决这...
在Java多线程编程中,有时我们需要确保所有子线程执行完毕后再进行后续操作,例如在并发测试、数据聚合或资源清理等场景。本篇文章将详细介绍五种在Java中等待所有子线程执行完的方法。 ### 方法一:使用`sleep`...
### Java多线程--让主线程等待所有子线程执行完毕 #### 核心知识点解析 在Java多线程环境中,让主线程等待所有子线程执行完毕是一个常见的需求,尤其是在处理大量数据或进行高性能计算时。这不仅有助于正确测量...
在Java多线程编程中,线程间的通信是至关重要的,因为它确保了多个并发执行的任务能够协调工作,避免数据不一致性和死锁等问题。本文将深入探讨两种主要的线程间通信方式:同步机制和基于轮询的方式。 1. 同步机制...
主线程通常负责程序的主要逻辑,而子线程则用来执行额外的任务,不阻塞主线程。 在Python中,我们可以使用`threading`模块来创建和管理线程。下面是一个简化的示例代码,演示了如何实现标题中描述的交替执行过程: ...
Java父线程等待所有子线程退出的实例 Java多线程编程中,父线程需要等待所有子线程退出是一种常见的场景。本文将通过一个实例,演示如何使用Java实现父线程等待所有子线程退出的机制。 首先,我们需要了解线程的...
1. **主线程向子线程发送消息**:在主线程中创建一个HandlerThread,启动它,然后创建一个关联此HandlerThread Looper的Handler。主线程可以通过这个Handler发送Message到子线程。 2. **子线程向主线程发送消息**:...
在Java中实现打印素数的程序是一项基础但重要的任务,这有助于理解和掌握循环、条件判断以及数学逻辑在编程中的应用。下面将详细解释如何通过Java编写一个打印素数的程序。 首先,我们需要理解基本的算法。一个常见...
当子线程抛出一个未捕获的Unchecked异常时,子线程会立即停止执行,但不会影响主线程或其他子线程。在这种情况下,如果不进行特殊处理,异常的信息可能会丢失,导致调试困难。 Java提供了一个机制来捕获并处理子...
本示例"android 主线程给子线程发送消息"是通过`Handler`机制来实现通信的,这是一个关键的多线程同步技术。 `Handler`是Android中用于在线程间传递消息和调度任务的工具,尤其是主线程与工作线程之间的通信。下面...