首页

通过Future等待获取基于Callable子任务返回结果代码示例

标签:Future,Callable,多线程     发布时间:2022-12-06   

一、前言

通过java.util.concurrent.Future获取java.util.concurrent.Callable定义返回结果子任务,并通过future.get() 等待多线程池子任务执行执行结束(更多子任务同步处理代码示例),并打印所有任务完成结果,点击更多多线程代码示例&教程下载(《亿级流量Jαva高并发与网络编程实战》-源码)。

二、代码示例

1)定义java.util.concurrent.Callable有返回状态子任务

package com.xwood.demo.thread;@b@@b@import java.util.concurrent.Callable;@b@@b@public class ThreadTask implements Callable<String> {@b@    private String tname;@b@@b@    public ThreadTask(String tname) {@b@        this.tname = tname;@b@    }@b@@b@    @Override@b@    public String call() throws Exception {@b@        //获取当前线程的名字@b@        String name = Thread.currentThread().getName();@b@        long currentTimeMillis = System.currentTimeMillis();@b@        System.out.println(name + " - 【" + tname + "】 启动时间:" + currentTimeMillis);@b@        //模拟线程执行...@b@        Thread.sleep((long) Math.random() * 2000);@b@        System.out.println(name + " - 【" + tname + "】 正在执行...");@b@        return name + " - 【" + tname + "】";@b@    }@b@}

2)main测试类 - newScheduledThreadPool定时任务线程池创建多个子线程任务(更多线程池用法代码示例)

package com.xwood.demo.thread;@b@@b@import java.util.ArrayList;@b@import java.util.concurrent.Executors;@b@import java.util.concurrent.Future;@b@import java.util.concurrent.ScheduledExecutorService;@b@import java.util.concurrent.TimeUnit;@b@@b@public class FutureTaskTest {@b@@b@    public static void main(String[] args) throws Exception {@b@        Future<String> result = null;@b@        ScheduledExecutorService schedulPool = Executors.newScheduledThreadPool(4);@b@        ArrayList<Future<String>> results = new ArrayList<Future<String>>();@b@        for (int i = 0; i < 2; i++) {@b@            /*@b@             * schedule(a,b,c)三个参数的含义:@b@             * a:向线程池中提交的任务;@b@             * b:该任务等待多长时间之后,才会被执行@b@             * c:b的时间单位@b@             */@b@            result = schedulPool.schedule(new ThreadTask("thread"+i), 1, TimeUnit.SECONDS);@b@            //存储各个线程的执行结果@b@            results.add(result);@b@        }@b@        //打印结果@b@        for(Future<String> res: results){@b@            System.out.println(res.isDone() ? "已完成":"未完成");@b@            System.out.println("等待线程执行完毕后,返回的结果: " + res.get());//等待任务执行完成,并获取执行结果@b@//            System.out.println("等待线程执行完毕后,返回的结果2: " + res.get(1,TimeUnit.SECONDS));//在指定的时间内会等待任务执行,超时则抛异常。@b@        }@b@        schedulPool.shutdown();@b@@b@        System.out.println("all完成!");@b@    }@b@@b@}

运行控制台结果

未完成@b@pool-1-thread-2 - 【thread1】 启动时间:1670340306862@b@pool-1-thread-1 - 【thread0】 启动时间:1670340306862@b@pool-1-thread-1 - 【thread0】 正在执行...@b@pool-1-thread-2 - 【thread1】 正在执行...@b@等待线程执行完毕后,返回的结果: pool-1-thread-1 - 【thread0】@b@已完成@b@等待线程执行完毕后,返回的结果: pool-1-thread-2 - 【thread1】@b@all完成!

future.get(1,TimeUnit.SECONDS)指定超时时间,控制台打印结果

未完成@b@Exception in thread "main" java.util.concurrent.TimeoutException@b@	at java.util.concurrent.FutureTask.get(FutureTask.java:205)@b@	at com.xwood.demo.thread.FutureTaskTest.main(FutureTaskTest.java:30)@b@pool-1-thread-2 - 【thread1】 启动时间:1670342724596@b@pool-1-thread-1 - 【thread0】 启动时间:1670342724596@b@pool-1-thread-2 - 【thread1】 正在执行...@b@pool-1-thread-1 - 【thread0】 正在执行...
<<推荐下载>>
  • (1) 阿里巴巴Java开发手册8种不同版本
  • (2) Web前端开发视频教程
  • (3) 30+明星讲师PPT课件分享一线大厂架构实战经验
  • (4) java开发_架构篇_视频资源分享_v2208
  • (5) java开发_高级篇_视频资源分享_v2208
  • (6) java开发_进阶篇(中级)_视频资源分享_v2208
  • (7) java开发_入门篇_视频资源分享_v2208
  • (8) 微信小程序开发视频1+167源码+实战demo等下载
  • (9) easy-shopping电子商务java源码(附脚本和安装文档说明)下载
  • (10) java常用的72份知名实用的电子书下载
  • (11) java开发性能优化资料整理大全(8份电子文档+3份实战优化)下载
  • (12) 9个常用的算法设计资料和100以上视频课件内容下载
  • (13) vue开发必备常用手册16件下载
  • (14) 21种不同技术集群方案(es、flink、redis、nginx、zk、lvs、kafka、mysql、k8s等)参考资料下载
  • (15) 20种技术代码规范(js/java/dba/阿里/华为/oracle/mysql等)参考资料下载
  • (16) 微服务五套资料(0-1,架构设计,springcloud,nacos等)下载
  • (17) 架构师(28知识图谱+3套简历模板+6套架构实战文档等)完整资料整理下载
  • (18) 大数据18套实战基础知识+8套简历模板下载
  • (19) 并发编程全套(7套+阿里巴巴+亿级实战等)实战资料下载
  • (20) Kafka九套学习整理知识点全套(面试+笔记+代码api+命令+容备等)资料下载
  • (21) java全套9个不同方向类型的面试题(基础+核心+大厂+架构师+近万套题库等)下载
  • (22) JAVA开发常用API帮助文档大全(超52种以上技术资料,高手必备)下载
  • (23) springcloud超详细139件全套学习实战资料( 视频课件+源码demo+文档资料等)下载
  • 更多推荐>>
  • <<热门文章>>