一个主线程下有多个子线程任务,主线程必须在100秒内将子线程执行的集合结果进行处理返回
2016-08-22 17:22
288 查看
一个主线程下有多个子线程任务,主线程必须在100秒内将子线程执行的集合结果进行处理返回
实现代码:
实现代码:
package cmd.chengxuyuanzhilu.async; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; /** * @author 微信公众号:程序员之路 * */ class Task implements Callable<String> { @Override public String call() throws Exception { System.out.println(String.format("子线程 %s: 在进行计算", Thread.currentThread().getName())); Thread.sleep(6000); int sum = 0; for (int i = 0; i < 100; i++) sum += i; return "子进程"+Thread.currentThread().getName()+":"+sum; } } /** * @author 微信公众号:程序员之路 * */ public class Test { public static void main(String[] args) { //个人建议,控制线程池中线程的个数,防止开启过多线程造成系统崩溃 ExecutorService executor = Executors.newFixedThreadPool(5); //创建100个任务 List<Task> tasks = new ArrayList<>(); for (int i = 0; i < 100; i++) { Task task = new Task(); tasks.add(task); } //ExecutorService的invokeAll方法执行任务集合中的所有任务,并设置超时时间(100秒)。超时后的任务将取消进行 List<Future<String>> futures = new ArrayList<>(); try { futures = executor.invokeAll(tasks, 100, TimeUnit.SECONDS);//注:执行所有的方法执行完的时间不能超过100秒,超时后的任务将取消执行 } catch (InterruptedException e) { e.printStackTrace(); } executor.shutdown(); Integer i = 1; Integer j = 0; for (Future<String> future : futures) { try { System.out.println(i+" : "+future.get()); i++; }catch (Exception e) { j++; } } System.out.println("未成功执行的任务个数:"+j); } }
相关文章推荐
- 你知道的,javascript语言的执行环境是"单线程模式",这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行,因此很多时候需要进行“异步模式”,请列举js异步编程的方法。
- 利用主线程与子线程间的消息通讯,实现任务处理队列.子线程中创建不会阻塞执行的窗口
- 在一个有返回值的方法里使用了子线程,如何返回子线程中的值,如下代码中,我在子线程获取到了address的值,但是这个方法的返回结果是空,该如何解决?
- 子线程返回前,使循环暂停但不使主线程卡死的办法,等待子线程有返回了之后,才执行主线程下一步代码的方法
- “操作必须执行一个可更新的查询”处理结果
- 一个完整的通过encoding/json信息传递格式,采用http.POST利用进行与服务器通信,并对返回结果进行解析处理的典型案例
- Android network:主线程将创建请求放入(请求)队列,处理线程每次取一个请求,进行处理(发送/读响应)
- python 写一个Mythread能返回线程执行的结果
- 关于在子线程中在run方法执行完之后通知主线程进行操作的方法。(Toast在子线程中无法使用)
- C# 利用委托和事件 传入一个参数进行进行计算并返回结果
- spring 装配bean后执行后台进程任务处理线程的处理方式
- 06____线程返回执行结果(Callable和Future)
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- window平台下使用任务计划定时执行php进行数据库处理
- 作为一个linux系统运维师必须掌握的定期任务执行命令cront
- Callable接口实现线程执行结果的返回
- (STL中自带的排序功能7.3.3)POJ 1318 Word Amalgamation(求解一个单词是否在字典里面。解法:将单词按字典序处理后的结果与字典中的单词安字典序处理后的结果进行比较)
- Activity、BroadcastReceiver、Service,只要是有长时间处理的任务,就需要重新开一个线程?!
- 利用主线程与子线程间的消息通讯,实现任务处理队列