A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package com.ithema.exam;

  2. import java.util.concurrent.Callable;
  3. import java.util.concurrent.ExecutorService;
  4. import java.util.concurrent.Executors;
  5. import java.util.concurrent.Future;

  6. /**
  7. * 十个线程相加,第一个线程从1加到10,第二个线程从11加到20 ,以此类推,最后再把这10个线程的结果相加,最后输出
  8. * 分析:每个线程的任务都是有返回值的,因此使用实现Callable接口的线程。
  9. * 返回值类型是int,而Callable是泛型接口,因此将泛型定义为Integer。
  10. * 每个线程都通过线程池的ExecutorService对象的submit方法开始运行,并由Future<Integer>对象接收运算结果。
  11. * 最后将每个Future对象的运算结果取出,相加后打印。
  12. *
  13. * @author Administrator
  14. *
  15. */
  16. public class Test1 {

  17.         public static void main(String[] args) throws Exception {
  18.                 int sum = 0;
  19.                 // 建立线程池
  20.                 ExecutorService es = Executors.newFixedThreadPool(10);
  21.                 // 运行线程并获取结果
  22.                 for (int i = 0; i < 10; i++) {
  23.                         Future<Integer> f = es.submit(new AddThread(i * 10 + 1));
  24.                         sum = sum + f.get();
  25.                 }
  26.                 es.shutdown();
  27.                 // 打印总结果
  28.                 System.out.println("sum = " + sum);
  29.         }

  30. }

  31. // 实现Callable<Integer>接口的线程对象
  32. class AddThread implements Callable<Integer> {
  33.         private int start;

  34.         public AddThread(int start) {
  35.                 this.start = start;
  36.         }

  37.         @Override
  38.         public Integer call() throws Exception {
  39.                 int sum = 0;
  40.                 for (int i = start; i < start + 10; i++) {
  41.                         sum = sum + i;
  42.                 }
  43.                 return sum;
  44.         }

  45. }
复制代码

4 个回复

正序浏览
100个赞!!
回复 使用道具 举报
谢谢这段代码 ~
回复 使用道具 举报
很好,学习了
回复 使用道具 举报
谢了 大哥 很实用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马