计算1..100  和1…200 的和,使用线程池开启两个线程 

调用Executors类的newFixedThreadPool方法参数是线程池容纳的线程数量 这里是2 返回的对象是 ExecutorService类型

用返回的对象 调用submit方法,传入的参数可以是 实现接口类 Runnable  或者是 Callable<数据类型>

泛型里约束的 数据类型,是Callable实现类的重写方法 call方法的 返回值,通过这个返回值可以将运算的结果 返回输出

传入的实现类对象,返回值是一个 Featrue类的对象该类的泛型约束的数据类型和 实现类的泛型约束的数据格式一致

用该类的对象调用get方法即可获得所需要的计算结果返回值。

 

 

  1. package demo06;
  2. import java.util.concurrent.ExecutionException;
  3. import java.util.concurrent.ExecutorService;
  4. import java.util.concurrent.Executors;
  5. import java.util.concurrent.Future;
  6. /*
  7. * 使用多线程技术,求和
  8. * 两个线程,1个线程计算1..100和,另一个线程计算1..200的和
  9. * 多线程的异步计算
  10. */
  11. public class ThreadPoolDemo {
  12. public static void main(String[] args) throws InterruptedException, ExecutionException {
  13. ExecutorService es=Executors.newFixedThreadPool(2);
  14. Future<Integer> f1=es.submit(new GetSumCallable(100));
  15. Future<Integer> f2=es.submit(new GetSumCallable(200));
  16. System.out.println(f1.get());
  17. System.out.println(f2.get());
  18. es.shutdown(); //销毁线程池,程序结束。不做这一步,程序将永久保持运行状态,资源得不到释放
  19. }
  20. }
  1. package demo06;
  2. import java.util.concurrent.Callable;
  3. public class GetSumCallable implements Callable<Integer> {
  4. private int a;
  5. public GetSumCallable(int a){
  6. this.a=a;
  7. }
  8. public Integer call(){
  9. int sum=0;
  10. for(int i=1;i<=a;i++){
  11. sum+=i;
  12. }
  13. return sum;
  14. }
  15. }

 

版权声明:本文为benjamin77原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/benjamin77/p/9132768.html