多线程处理list
package com.zhx.web.invoice.service; import java.util.*;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future; /**
* @author SimonHu
* @Description:
* @Created on 2018/10/17 13:33
*/
public class test {
public static void main(String[] args) {
test a= new test();
a.dealListWithMutiThread();
}
public void dealListWithMutiThread(){
LinkedList<Map> dataJson = new LinkedList<>();
List<Object> list = new ArrayList<Object>(10000);
for (int i = 0; i < 10000; i++) {
Map map = new HashMap<>();
map.put(i,"simon"+i);
list.add(map);
}
int index = 0;
ExecutorService ex = Executors.newFixedThreadPool(5);
int dealSize = 2000;
List<Future<List<Object>>> futures = new ArrayList<>(5);
//分配
for(int i=0;i<5;i++,index+=dealSize){
int start = index;
if(start>=list.size()) {
break;
}
int end = start + dealSize;
end = end>list.size() ? list.size() : end;
futures.add(ex.submit(new Task(list,dataJson,start,end)));
}
try {
//处理
List<Object> result = new ArrayList<>();
for(Future<List<Object>> future : futures){
//合并操作
result.addAll(future.get());
}
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
} private class Task implements Callable<List<Object>> { private List<Object> list;
private LinkedList<Map> data;
private int start;
private int end; public Task(List<Object> list,LinkedList<Map> data,int start,int end){
this.list = list;
this.data = data;
this.start = start;
this.end = end;
} @Override
public List<Object> call() throws Exception {
Object obj = null; List<Object> retList = new ArrayList<Object>();
for(int i=start;i<end;i++){
obj = list.get(i);
//你的处理逻辑
retList.add(obj);
}
//返回处理结果
return retList;
}
}
}
=========================================================
public void dealListWithMutiThread(LinkedList<Map> dataJson,List<Map> list,List<Map> mapList){
int index = 0;
ExecutorService ex = Executors.newFixedThreadPool(5);
int dealSize = 2000;
List<Future<List<Map>>> futures = new ArrayList<>(5);
//分配
for(int i=0;i<5;i++,index+=dealSize){
int start = index;
if(start>=list.size()) {
break;
}
int end = start + dealSize;
end = end>list.size() ? list.size() : end;
futures.add(ex.submit(new Task(list,dataJson,mapList,start,end)));
}
try {
//处理
List<Map> result = new ArrayList<>();
for(Future<List<Map>> future : futures){
//合并操作
result.addAll(future.get());
}
dataJson.addAll(result);
} catch (Exception e) {
e.printStackTrace();
}
}
private class Task implements Callable<List<Map>> {
private List<Map> list;
private List<Map> mapList;
private LinkedList<Map> data;
private int start;
private int end;
public Task(List<Map> list,LinkedList<Map> data, List<Map> mapList,int start,int end){
this.list = list;
this.data = data;
this.mapList = mapList;
this.start = start;
this.end = end;
}
@Override
public List<Map> call() throws Exception {
for(int i=start;i<end;i++){
//你的处理逻辑
for (Map map : list) {
HashMap<String, Object> stringObjectHashMap = new HashMap<>();
String openTime = String.valueOf(map.get("open_time"));
LinkedList<Map> maps = new LinkedList<>();
for (Map map1 : mapList) {
if (String.valueOf(map1.get("openTime")).equals(openTime)) {
maps.add(map1);
stringObjectHashMap.put("dateMouth", openTime);
stringObjectHashMap.put("expenseInfo", maps);
}
}
if (!stringObjectHashMap.isEmpty()) {
data.add(stringObjectHashMap);
}
}
}
//返回处理结果
return data;
}
}
多线程处理list的更多相关文章
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- QT实现HTTP JSON高效多线程处理服务器
QT实现HTTP JSON高效多线程处理服务器 Legahero QQ:1395449850 现在一个平台级的系统光靠web打天下是不太现实的了,至少包含APP和web两部分,在早期APP直接访问we ...
- 由一篇文章引发的思考——多线程处理大数组
今天领导给我们发了一篇文章文章,让我们学习一下. 文章链接:TAM - Threaded Array Manipulator 这是codeproject上的一篇文章,花了一番时间阅读了一下.文章主要是 ...
- 多线程处理sql server2008出现Transaction (Process ID) was deadlocked on lock resources with another process and has been chose问题
多线程处理sql server2008某个表中的数据时,在Update记录的时候出现了[Transaction (Process ID 146) was deadlocked on lock reso ...
- WPF 多线程处理(1)
WPF 多线程处理(1) WPF 多线程处理(2) WPF 多线程处理(3) WPF 多线程处理(4) WPF 多线程处理(5) WPF 多线程处理(6) 废话不多说,先上图: 多线程处理数据后在th ...
- WPF 多线程处理(5)
WPF 多线程处理(1) WPF 多线程处理(2) WPF 多线程处理(3) WPF 多线程处理(4) WPF 多线程处理(5) WPF 多线程处理(6) 项目的目录: 以下是FileStroage的 ...
- WPF 多线程处理(4)
WPF 多线程处理(1) WPF 多线程处理(2) WPF 多线程处理(3) WPF 多线程处理(4) WPF 多线程处理(5) WPF 多线程处理(6) 开始一个线程处理读取的文件并且更新到list ...
- WPF 多线程处理(6)
WPF 多线程处理(1) WPF 多线程处理(2) WPF 多线程处理(3) WPF 多线程处理(4) WPF 多线程处理(5) WPF 多线程处理(6) 以下是子窗体的UI: <Window ...
- WPF 多线程处理(3)
WPF 多线程处理(1) WPF 多线程处理(2) WPF 多线程处理(3) WPF 多线程处理(4) WPF 多线程处理(5) WPF 多线程处理(6) 首先我们需要几个属性来保存取得的数据,因为在 ...
- WPF 多线程处理(2)
WPF 多线程处理(1) WPF 多线程处理(2) WPF 多线程处理(3) WPF 多线程处理(4) WPF 多线程处理(5) WPF 多线程处理(6) WPF UI 设计需要自动适应窗体大小,那么 ...
随机推荐
- P1313 计算系数 HMR大佬讲解
今天,HMR大佬给我们讲解了这一道难题. 这道题明显的二项式定理,自然想到了要用到杨辉三角了.基本思路就是先用for循环求出杨辉三角,这样就求出了x的n次方的系数和y的m次方的系数. 这是大佬的AC代 ...
- [luogu3380][bzoj3196]【模板】二逼平衡树【树套树】
题目地址 [洛谷传送门] 题目大意 区间查询k的排名,查找k排名的数,单点修改,区间前驱,区间后继. 感想 真的第一次写树套树,整个人都不对了.重构代码2次,发现样例都过不了,splay直接爆炸,可能 ...
- C++ Under the Hood
The original article is taken from http://msdn.microsoft.com/archive/en-us/dnarvc/html/jangrayhood.a ...
- Zookeeper分布式集群原理与功能
Zookeeper功能简介 ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现. 分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅 ...
- python之路day02--格式化输出、初始编码、运算符
格式化输出 格式化输出替换字符串.字符串中%占位符,,%%s就是代表百分号,不代表占位符s 字符串 stringd 数字 dight name = input('请输入你的名字:') age = in ...
- GWAS群体分层 (Population stratification):利用plink对基因型进行PCA
一.为什么要做祖先成分的PCA? GWAS研究时经常碰到群体分层的现象,即该群体的祖先来源多样性,我们知道的,不同群体SNP频率不一样,导致后面做关联分析的时候可能出现假阳性位点(不一定是显著信号位点 ...
- Swagger - ui 学习
今天同组的打伙伴给介绍了 Swagger-ui 这个 自动生成 接口文档的 工具,感觉比较方便好用, 遂决定 学习一下, 开个随笔进行随时记录,同时也是提醒自己 先保存两篇感觉还不错的文章 : htt ...
- POJ 3186 Treats for the Cows (动态规划)
Description FJ has purchased N (1 <= N <= 2000) yummy treats for the cows who get money for gi ...
- python httpserver
python3: python -m http.server 80 python2: python -m SimpleHTTPServer 9004
- Matlab调用Java类
第一步:定位Matlab中Java环境的ext目录 新建一个M script文件,或者直接在Matlab的交互式命令行中输入: >> disp(java.lang.System.getPr ...