java_ExecutorService, CompletionService - 有返回值并行工作方式
package com.demo.test3; import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future; /**
* @author QQ: 1236897
*
*/ //工作顺序(0000)和(aaaa,bbbb,cccc,dddd)并行, (aaaa),(bbbb),(cccc),(dddd) 为串行出现
public class DemoTEST { public static void main(String[] args) { final ThreadService service = new ThreadService(); service.renderPage(); } } class ThreadService { private final ExecutorService executor = Executors.newCachedThreadPool(); public void renderPage() { final List<String> list = new ArrayList<String>();
list.add("aaaa");
list.add("bbbb");
list.add("ccccc");
list.add("dddddd"); Callable<List<String>> task = new Callable<List<String>>() { @Override
public List<String> call() throws Exception { List<String> result = new ArrayList<String>(); for (String str : list) {
System.out.println("input to result.....");
Random r = new Random();
double d2 = r.nextDouble() * 5;
Thread.sleep(1000*(int)d2);
result.add(str);
} return result;
} }; Future<List<String>> future = executor.submit(task);
System.out.println("000000000 - "+"=======此处和task 同时并行====================");
try {
List<String> res = future.get();
for (String s : res) {
System.out.println(s+"--"+Thread.currentThread().getName());
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
executor.shutdown(); }
}
//==============================================================================================
package com.demo.test4; import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future; /**
* @author QQ: 1236897
*
*/
//工作方式 - (0000)和(aaaa,bbbb,cccc,dddd)并行开始,(aaaaa)(bbbbb)(ccccc)(ddddd) 并行工作
public class DemoTest2 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ThreadService service = new ThreadService();
service.renderPage();
} } class ThreadService { private final ExecutorService executor = Executors.newCachedThreadPool(); public void renderPage() { final List<String> list = new ArrayList<String>();
list.add("aaaa");
list.add("bbbb");
list.add("ccccc");
list.add("dddddd"); CompletionService<String> completionService = new ExecutorCompletionService<String>(
executor); for (final String s : list) {
completionService.submit(new Callable<String>() { @Override
public String call() throws Exception {
// TODO Auto-generated method stub
Random r = new Random();
double d2 = r.nextDouble() * 5;
Thread.sleep(1000 * (int) d2);
return s;
} });
} System.out.println("00000" + "==========并行开始===="); try {
for (int i = 0; i < list.size(); i++) { Future<String> str = completionService.take();
String s = str.get();
System.out.println(s); }
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
java_ExecutorService, CompletionService - 有返回值并行工作方式的更多相关文章
- [转]WinExec、ShellExecute和CreateProcess及返回值判断方式
[转]WinExec.ShellExecute和CreateProcess及返回值判断方式 http://www.cnblogs.com/ziwuge/archive/2012/03/12/23924 ...
- Java多线程和并发(四),线程返回值获取方式和Callable接口
目录 1.主线程等待法 2.使用Thread类的join()阻塞当前线程,等待子线程执行完毕 3.通过Callable接口实现:通过FutureTask Or线程池获取 四.线程返回值获取方式和Cal ...
- Ext_两种处理服务器端返回值的方式
1.Form表单提交返回值处理 //提交基本信息表单 f.form.submit({ clientValidation:true, //表单提交后台处理地址 url:' ...
- Python re 模块findall() 函数返回值展现方式详解
findall 函数: 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表. 注意: match 和 search 是匹配一次 findall 匹配所有,mat ...
- springMVC中响应的返回值获取方式
package com.hope.controller;import com.hope.domain.User;import org.springframework.stereotype.Contro ...
- net异步线程获取返回值的三种方式
方式一:endInvoke using System; using System.Collections.Generic; using System.Text; using System.Thread ...
- Android——关于Activity跳转的返回(无返回值和有返回值)——有返回值
说明: 跳转页面,并将第一页的Edittext输入的数据通过按钮Button传到第二页用Edittext显示,点击第二页的 返回按钮Button返回第一页(改变第二页的Edittext的内容会传至第一 ...
- Ksoap2 获取webservice返回值的getResponse() 出现的问题
今天写了一个判断记录重复的webservcie 返回布尔类型 // 判断序列号在数据库是否重复 public static boolean isSerialNumExist(String serial ...
- 深入了解MyBatis返回值
深入了解MyBatis返回值 想了解返回值,我们须要了解resultType,resultMap以及接口方法中定义的返回值. 我们先看resultType和resultMap resultType和r ...
随机推荐
- [GRYZ2015]工业时代
试题描述 小FF的第一片矿区已经开始运作了, 他着手开展第二片矿区……小FF的第二片矿区, 也是”NewBe_One“计划的核心部分, 因为在这片矿区里面有全宇宙最稀有的两种矿物,科学家称其为NEW矿 ...
- bzoj 3365 [Usaco2004 Feb]Distance Statistics 路程统计(点分治,单调)
[题意] 求树上长度不超过k的点对数目. [思路] 和 Tree 一样一样的. 就是最后统计的时候别忘把根加上. [代码] #include<set> #include<cmath& ...
- 直线相交 POJ 1269
// 直线相交 POJ 1269 // #include <bits/stdc++.h> #include <iostream> #include <cstdio> ...
- mac 添加安卓设备的支持
1. 把android设备插到mac电脑上 2. 首先可以看一下之前在该mac电脑上有没有添加过这个 , 命令 : adb devices 如果显示出,下面字样,说明之前添加过了,下面就可以 ...
- 防asp木马运行
首 页 > 技术支持 防asp木马运行 目前比较流行的ASP木马主要通过三种技术来进行对服务器的相关操作. 一.使用FileSystemObject组件 FileSystemObject可以对文 ...
- Linux服务器集群系统(一)(转)
add by zhj:虽然是2002年的文章,但读来还是收益良多.在 章文嵩:谈LVS及阿里开源背后的精彩故事 中LVS发起人及主要贡献者谈了LVS的开发过程及阿里开源的一些故事 原文:http:// ...
- HDU 5842 Lweb and String (水题)
Lweb and String 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5842 Description Lweb has a string S ...
- HDU 5810 Balls and Boxes (找规律)
Balls and Boxes 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5810 Description Mr. Chopsticks is i ...
- iOS学习之触摸事件
触摸事件 iOS中的事件: 在用户使用app过程中,会产生各种各样的事件.iOS中的事件可以分为3大类型: view的触摸事件处理: 响应者对象: 在iOS中不是任何对象都能处理事件,只有继承了UIR ...
- CentOS_6.5 64位系统,安装git服务器+客户端
================ git服务器安装 ==================== CentOS安装Git服务器 Centos 6.4 + Git 1.8.2.2 + gitosis## . ...