首页 > 编程语言 > 详细

0050线程池中的newFixedThreadPool的具体用法

时间:2020-02-20 11:47:56      阅读:39      评论:0      收藏:0      [点我收藏+]
newFixedThreadPool的用法:每个线程处理一个业务逻辑,调用sumbit方法,通过Future接收返回结果,最后对多个线程处理结果进行合并,参考代码如下:

 

package Thread;

 

import java.util.Random;

import java.util.concurrent.Callable;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.Future;

 

public class FixedThreadPoolTest {

    

     public static void main(String[] args)throws Exception {

         //创建含有4个线程的线程池,用来处理4个任务

         ExecutorService executorService = Executors.newFixedThreadPool(4);

         Integer a = 0;

         Integer b = 0;

         Integer c = 0;

         Integer d = 0;

         long beginTime = System.nanoTime();

         //调用sumbit方法,用future接收返回值

         //模拟第1个线程,耗时1秒

         Future<Integer> future1 = executorService.submit(new Callable<Integer>() {

              public Integer call(){

                   try {

                       Thread.sleep(1000);

                   } catch (InterruptedException e) {

                       // TODO Auto-generated catch block

                       e.printStackTrace();

                   }

                   Integer newInteger = new Random().nextInt(10)+1;

                   return newInteger;

              }

         });

         //模拟第2个线程,耗时2秒

         Future<Integer> future2 = executorService.submit(new Callable<Integer>() {

              public Integer call(){

                   try {

                       Thread.sleep(2000);

                   } catch (InterruptedException e) {

                       // TODO Auto-generated catch block

                       e.printStackTrace();

                   }

                   Integer newInteger = new Random().nextInt(10)+1;

                   return newInteger;

              }

         });

         //模拟第3个线程,耗时5秒

         Future<Integer> future3 = executorService.submit(new Callable<Integer>() {

              public Integer call(){

                   try {

                       Thread.sleep(5000);

                   } catch (InterruptedException e) {

                       // TODO Auto-generated catch block

                       e.printStackTrace();

                   }

                   Integer newInteger = new Random().nextInt(10)+1;

                   return newInteger;

              }

         });

         //模拟第4个线程,耗时10秒

         Future<Integer> future4 = executorService.submit(new Callable<Integer>() {

              public Integer call(){

                   try {

                       Thread.sleep(10000);

                   } catch (InterruptedException e) {

                       // TODO Auto-generated catch block

                       e.printStackTrace();

                   }

                   Integer newInteger = new Random().nextInt(10)+1;

                   return newInteger;

              }

         });

         //future1.get()是一个阻塞的方法,必须上边对应的线程执行完毕,future中有了返回值之后才能取到结果,否则get()时就会阻塞

         //从程序启动开始计算,1秒后打印a

         a = future1.get();

         System.out.println("a="+a);

//从程序启动开始计算,2秒后打印b

         b = future2.get();

         System.out.println("b="+b);

         //从程序启动开始计算,5秒后打印c

         c = future3.get();

         System.out.println("c="+c);

         //从程序启动开始计算,10秒后打印a

         d = future4.get();

         System.out.println("d="+d);

         int result = a+b+c+d;

         System.out.println("result=" + result);

         long endTime = System.nanoTime();

         //打印结果为共耗时10秒

         System.out.println("共耗时" + (endTime-beginTime)/1000000000 + "毫秒");

     }

}

小总结:如果不使用多线程,而是4个任务串行执行,将耗时1+2+5+10=18秒,这样极大的减少了运行时间。

0050线程池中的newFixedThreadPool的具体用法

原文:https://www.cnblogs.com/xiao1572662/p/12334881.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!