多线程处理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 设计需要自动适应窗体大小,那么 ...
随机推荐
- mybatis返回结果封装为map的探索
需求 根据课程id 列表,查询每个课程id的总数,放到一个map里 最简单的就是循环遍历,每一个都查询一次网上说mybatis可以返回Map 和 List<Map>两种类型 尝试 直接返回 ...
- Product(欧拉函数)
原题地址 先吐槽一波:凉心出题人又卡时间又卡空间 先来化简一波柿子 \[\prod_{i=1}^{n}\prod_{j=1}^{n}\frac{lcm(i,j)}{gcd(i,j)}\] \[=\pr ...
- 【机器学习】BP & softmax求导
目录 一.BP原理及求导 二.softmax及求导 一.BP 1.为什么沿梯度方向是上升最快方向 根据泰勒公式对f(x)在x0处展开,得到f(x) ~ f(x0) + f'(x0)(x-x0) ...
- @RequestParam,@PathParam,@PathVariable等注解区别
@RequestParam 和 @PathVariable 注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam 是从request里面拿取值,而 @P ...
- Best Practice API
# 建议直接使用的第三方类 Common Lang =>StringUtils =>Validate Guava =>Cache =>Ordering JDK7(LTS JDK ...
- Pandas时间处理的一些小方法
一.以下有两种方式可以创建一个Timestamp对象: 1. Timestamp()的构造方法 import pandas as pd from datetime import datetime as ...
- IKanalyzer分词器分词并且统计词频
<dependency> <groupId>com.janeluo</groupId> <artifactId>ikanalyzer</artif ...
- Android app中的so库和CPU架构
一.android目前有几种cpu架构? 早期的Android系统几乎只支持ARMv5的CPU架构,目前支持七种CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MI ...
- rest_framework框架的认识
它是基于Django的,帮助我们快速开发符合RESTful规范的接口框架. 一 路由 可以通过路由as_view()传参 根据请求方式的不同执行对应不同的方法 在routers模块下 封装了很多关于 ...
- percona-toolkit 之 【pt-online-schema-change】说明【转】
背景: MySQL 大字段的DDL操作:加减字段.索引.修改字段属性等,在5.1之前都是非常耗时耗力的,特别是会对MySQL服务产生影响.在5.1之后随着Plugin Innodb的出现在线加索引的提 ...