我是靠谱客的博主 典雅小猫咪,这篇文章主要介绍多线程并行加法java,采用多线程对足够大的list中的所有整数进行相加求和,现在分享给大家,希望可以做个参考。

package subListByThread.subList.byFuture;

import java.util.ArrayList;

import java.util.List;

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;

/**

* 使用ExecutorService.invokeAll()方法计算

*

* @author Administrator

*

*/

public class CountSumWithCallable {

public static void main(String[] args) throws InterruptedException, ExecutionException {

int threadCounts = 18;

long sum = 0;

ExecutorService exec = Executors.newFixedThreadPool(threadCounts);

List> callList = new ArrayList>();

List list = new ArrayList();

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

list.add(i);

}

int len = list.size() / threadCounts;// 分割段数

if (len == 0) {

threadCounts = list.size();

len = list.size() / threadCounts;

}

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

final List subList;

if (i == threadCounts - 1) {

subList = list.subList(i * len, list.size());

} else {

subList = list.subList(i * len, len * (i + 1) > list.size() ? list.size() : len * (i + 1));

}

// 采用匿名内部类实现

callList.add(new Callable() {

public Long call() throws Exception {

long subSum = 0L;

for (Integer i : subList) {

subSum += i;

}

System.out.println("分配给线程:" + Thread.currentThread().getName() + "那一部分的list的整数和为:" + subSum);

return subSum;

}

});

}

List> futureList = exec.invokeAll(callList);

for (Future future : futureList) {

sum += future.get();

}

exec.shutdown();

System.out.println("sum =====:" + sum);

}

}

最后

以上就是典雅小猫咪最近收集整理的关于多线程并行加法java,采用多线程对足够大的list中的所有整数进行相加求和的全部内容,更多相关多线程并行加法java,采用多线程对足够大内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(108)

评论列表共有 0 条评论

立即
投稿
返回
顶部