黑马程序员技术交流社区
标题:
一道关于线程池的题:10个线程计算结果相加
[打印本页]
作者:
li3N
时间:
2015-11-12 10:46
标题:
一道关于线程池的题:10个线程计算结果相加
package com.ithema.exam;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* 十个线程相加,第一个线程从1加到10,第二个线程从11加到20 ,以此类推,最后再把这10个线程的结果相加,最后输出
* 分析:每个线程的任务都是有返回值的,因此使用实现Callable接口的线程。
* 返回值类型是int,而Callable是泛型接口,因此将泛型定义为Integer。
* 每个线程都通过线程池的ExecutorService对象的submit方法开始运行,并由Future<Integer>对象接收运算结果。
* 最后将每个Future对象的运算结果取出,相加后打印。
*
* @author Administrator
*
*/
public class Test1 {
public static void main(String[] args) throws Exception {
int sum = 0;
// 建立线程池
ExecutorService es = Executors.newFixedThreadPool(10);
// 运行线程并获取结果
for (int i = 0; i < 10; i++) {
Future<Integer> f = es.submit(new AddThread(i * 10 + 1));
sum = sum + f.get();
}
es.shutdown();
// 打印总结果
System.out.println("sum = " + sum);
}
}
// 实现Callable<Integer>接口的线程对象
class AddThread implements Callable<Integer> {
private int start;
public AddThread(int start) {
this.start = start;
}
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = start; i < start + 10; i++) {
sum = sum + i;
}
return sum;
}
}
复制代码
作者:
邸永明
时间:
2015-11-12 14:18
谢了 大哥 很实用
作者:
黑夜中那颗星
时间:
2015-11-12 15:19
很好,学习了
作者:
lyg0374
时间:
2015-11-12 15:25
谢谢这段代码 ~
作者:
刘旭波
时间:
2015-11-12 20:20
100个赞!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2