- 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;
- }
- }
复制代码 |
|