首页 > 其他分享 >使用线程池,并发计算1~50、51~100的和,再进⾏汇总统计。

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

时间:2022-08-21 16:33:06浏览次数:90  
标签:int 51 50 Callable 线程 返回值 call

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

 

获取线程池的几种方式:

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
From: https://www.cnblogs.com/huangruiwu/p/16610223.html

相关文章

  • 多线程实现生产和消费
    若⼲个⽣产者在⽣产产品,这些产品将提供给若⼲个消费者去消费,为了使⽣产者和消费者能并发执⾏,在两者之间设置⼀个能存储多个产品的缓冲区,⽣产者将⽣产的产品放⼊缓冲区中,消......
  • 案例分析 | 二手车零售DTC黑马Carvana卖车卖出 500 亿美元市值
    汽车经销商的未来正在从产品驱动的模式转向由客户体验、忠诚度、品牌提供的移动服务驱动的二手车零售DTC模式,去适应客户不断变化的新期待。汽车零售商必须考虑颠覆目前的......
  • java多线程
    一、定义很多人应该对进程,线程,程序这几个概念混淆.程序指什么?简而言之,程序就是代码,用不同语言编写的代码;什么是进程?进程就是表示程序一次完整的执行;线程指的是,在......
  • 《GB27951-2011》PDF下载
    《GB27951-2011皮肤消毒剂卫生要求》PDF下载《GB27951-2011》简介本标准规定了皮肤消毒剂的技术要求、试验方法、使用方法、标签和说明书以及使用注意事项;本标准适用......
  • 《GB5135.21-2011》PDF下载
    《GB5135.21-2011自动喷水灭火系统第21部分:末端试水装置》PDF下载《GB5135.21-2011》简介GB5135的本部分规定了自动喷水灭火系统用末端试水装置的术语和定义、分类、......
  • 【长期】板刷Codeforces 1500-1700 的构造题
    【长期】板刷Codeforces1500-1700的构造题https://codeforces.com/problemset/page/1?tags=constructive+algorithms%2C1500-1700&order=BY_RATING_ASC每天三道,记录一......
  • 多线程.总结
    packageoop.dxcgaoji;importcom.sun.org.apache.xpath.internal.functions.FuncTrue;importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutionExce......
  • 对Jmeter-基础线程组的一点解释
    概述线程组是一个测试计划的起点。测试计划中所有元件的运行都必须依托于线程组。每个线程组都会独立的运行测试计划,互不干扰线程数线程数在并发用户场景下表示用户数......
  • jmeter性能测试-Arrivals 线程组解释
    概述Arrivals线程组,基本用法就是通过设计预期的总吞吐量,让系统计算需要的线程数。此时的线程数就是平均并发数如果单线程的业务处理时间是2s/笔,也就是吞吐量为0.5笔/s,......
  • 多线程.线程池
    ExecutorService和ExecutorsExecutorService:真正的线程池接口。常见子类ThreadPoolExecutorvoidexecute(Runnablecommand):执行任务/命令,没有返回值,一般用来执行Run......