ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用线程池,并发计算1~50、51~100的和,再进⾏汇总统计。

2022-08-21 16:30:08  阅读:210  来源: 互联网

标签:int 51 50 Callable 线程 返回值 call public


知识点:获取线程池、提交任务、获取返回值

 

获取线程池的几种方式:

newFixedThreadPool(int nThreads) 获取固定数量的线程池。参数:指定线程池中线程的数量。(使用这种)

newCachedThreadPool() 获得动态数量的线程池,如不够则创建新的,⽆上限。

newSingleThreadExecutor() 创建单个线程的线程池,只有⼀个线程。

newScheduledThreadPool() 创建固定⼤⼩的线程池,可以延迟或定时执⾏任务。

 

Callable:jdk1.5之后可以使用Callable来实现线程,这个类的call方法具有泛型返回值、可以声明异常。

Runnable接⼝和Callable接⼝的区别:

Callable接⼝中call⽅法有返回值,Runnable接⼝中run⽅法没有返回值。

Callable接⼝中call⽅法有声明异常,Runnable接⼝中run⽅法没有异常。

 

Future接⼝表示将要执⾏完任务的结果。 get()以阻塞形式等待Future中的异步处理结果(call()的返回值)。

 

案例1:使⽤两个线程,并发计算1~50、51~100的和,再进⾏汇总统计。

public class TestFuture2 {
    public static void main(String[] args) throws Exception{
        //1创建线程池
        ExecutorService es= Executors.newFixedThreadPool(2);
        //2提交任务
        Future<Integer> future1=es.submit(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                int sum=0;
                for(int i=1;i<=50;i++) {
                    sum+=i;
                }
                System.out.println("1-50计算完毕");
                return sum;
            }
        });

        Future<Integer> future2=es.submit(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                int sum=0;
                for(int i=51;i<=100;i++) {
                    sum+=i;
                }
                System.out.println("51-100计算完毕");
                return sum;
            }
        });
        //3获取结果
        int sum=future1.get()+future2.get();
        System.out.println("结果是:"+sum);
        //4关闭线程池
        es.shutdown();
    }
}

 

标签:int,51,50,Callable,线程,返回值,call,public
来源: https://www.cnblogs.com/huangruiwu/p/16610223.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有