2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > java并行处理集合_java多线程并行处理List集合数据

java并行处理集合_java多线程并行处理List集合数据

时间:2021-07-18 03:32:12

相关推荐

java并行处理集合_java多线程并行处理List集合数据

前言碎语

最近可能要批量处理一些数据,准备使用多线程来助力,回顾了下多线程的一些开发技巧,下面是多线程并行处理List的一个小例子

代码看关键

/**

* @author kl by /6/25

* @boke www.kailing.pub

*/

public class MutilThreadTask {

public static void main(String[] args) {

List list = new ArrayList();

for (int i = 0; i < 8014; i++) {

list.add(i + "test.png");

}

new MutilThreadTask().handleListMutiSchedule(list,5);

}

//多线程并行处理list数据集

public void handleListMutiSchedule(List list,int taskCount){

System.out.println("begin====================================");

ScheduledExecutorService executorService= Executors.newScheduledThreadPool(taskCount);

int start = 0;

int listSize=list.size();

int remainder=listSize%taskCount;

int taskDataSize = listSize/taskCount;

//平均分配task任务

for(int i=0;i

int end = start + taskDataSize;

//最后如果有分配不均的,多余部分交给最后一个任务处理

if(i==taskCount-1){

if(remainder!=0){

end=listSize;

}

}

executorService.schedule(new Task(list,start,end),0,TimeUnit.SECONDS);

}

}

//多线程并行处理list数据集

public void handleListMutiThread(List list,int taskCount){

int start = 0;

ExecutorService ex = Executors.newFixedThreadPool(taskCount);

int listSize=list.size();

int remainder=listSize%taskCount;

int taskDataSize = listSize/taskCount;

List futures = new ArrayList(taskCount);

//平均分配task任务

for(int i=0;i

int end = start + taskDataSize;

//最后如果有分配不均的,多余部分交给最后一个任务处理

if(i==taskCount-1){

if(remainder!=0){

end=listSize;

}

}

Future future=ex.submit(new Task(list,start,end)) ;

futures.add(future);

}

try {

//处理

for(Future future : futures){

Object listsf= future.get();

}

System.exit(0);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* Task任务执行单元

*/

private class Task implements Callable> {

private List list;

private int start;

private int end;

public Task(List list,int start,int end){

this.list = list;

this.start = start;

this.end = end;

}

@Override

public List call() throws Exception {

Object obj = null;

List retList = new ArrayList();

for(int i=start;i

obj = list.get(i);

Thread.sleep(10);//

System.out.println(Thread.currentThread()+"当前处理:"+obj);

// System.out.println(UfileUtil.uploadUFile(obj.toString(),new FileInputStream("E:\\test.png")));

}

//返回处理结果

return retList;

}

}

}

本文同步分享在 博客“kailing”(other)。

如有侵权,请联系 support@ 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。