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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package com.kxg_07;

  2. import java.util.concurrent.Callable;

  3. public class MyCallable implements Callable<Integer> {
  4.        
  5.         private int number;
  6. //        定义带参构造
  7.         public MyCallable(int number) {
  8.                 this.number = number;
  9.         }

  10.         @Override
  11.         public Integer call() throws Exception {
  12. //                定义参数用来接收和
  13.                 int sum = 0;
  14.                
  15. //                求出和
  16.                 for (int i = 0; i < number; i++) {
  17.                         sum += i;
  18.                 }
  19.                
  20. //                返回和
  21.                 return sum;
  22.         }
  23. }
复制代码
  1. package com.kxg_07;

  2. /*
  3. * 利用Callable实现多线程求和
  4. *
  5. *                        
  6. *                         Future<?> submit(Runnable task):添加Runnable实现类
  7. */
  8. import java.util.concurrent.ExecutionException;
  9. import java.util.concurrent.ExecutorService;
  10. import java.util.concurrent.Executors;
  11. import java.util.concurrent.Future;

  12. public class CallableDemo {
  13.         public static void main(String[] args) throws InterruptedException,
  14.                         ExecutionException {
  15.                 // 创建线程池
  16.                 ExecutorService pool = Executors.newFixedThreadPool(2);

  17.                 // 添加线程到线程中,添加方法是submit(),其返回值是Future<T>接口,用此接口接收
  18.                 // <T> Future<T> submit(Callable<T> task):添加Callable实现类
  19.                 Future<Integer> f1 = pool.submit(new MyCallable(100));
  20.                 Future<Integer> f2 = pool.submit(new MyCallable(50));
  21.                
  22.                 // 用Future<T>接口下的T get()方法,得到Future<T>接口的泛型类型返回值,也就是线程的返回值
  23.                 Integer i1 = f1.get();
  24.                 Integer i2 = f2.get();
  25.                
  26.                 // 输出结果
  27.                 System.out.println(i1);
  28.                 System.out.println(i2);

  29.                 // 结束线程池
  30.                 pool.shutdown();
  31.         }
  32. }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马