• 技术文章 >java >java教程

    Future在java中获取线程结果

    小妮浅浅小妮浅浅2021-03-10 16:54:20原创7148

    1、概念

    Future表示一个可能还没有完成的异步任务的结果,针对这个结果可以添加Callback以便在任务执行成功或失败后作出相应的操作。

    2、Future接口

    Future接口定义了主要的5个接口方法,有RunnableFuture和SchedualFuture继承这个接口,以及CompleteFuture和ForkJoinTask继承这个接口。

    3、实例

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    package test;

      

    import java.util.concurrent.Callable;

    import java.util.concurrent.ExecutionException;

    import java.util.concurrent.FutureTask;

      

    public class CallableFutureTest {

      

    public static void main(String[] args) {

    long startTime = System.currentTimeMillis();

    Callable<Integer> calculateCallable = new Callable<Integer>() {

    @Override

    public Integer call() throws Exception {

    // TODO Auto-generated method stub

    Thread.sleep(2000);//模拟耗时时间

    int result = 1+2;

    return result;

    }

    };

    FutureTask<Integer> calculateFutureTask = new FutureTask<>(calculateCallable);

    Thread t1 = new Thread(calculateFutureTask);

    t1.start();

    //现在加入Thread运行的是一个模拟远程调用耗时的服务,并且依赖他的计算结果(比如网络计算器)

    try {

    //模拟耗时任务,主线程做自己的事情,体现多线程的优势

    Thread.sleep(3000);

    int a = 3+5;

    Integer result = calculateFutureTask.get();

    System.out.println("result = "+(a+result));//模拟主线程依赖子线程的运行结果

    long endTime = System.currentTimeMillis();

    System.out.println("time = "+(endTime-startTime)+"ms");

    } catch (InterruptedException | ExecutionException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    从上面可以看到上面耗时大概是3s,其实主要就是主线程sleep(3000)所耗费的时间,如果不使用Future,并且依赖线程的结果,我们可能需要的时间可能是需要5s(子线程2s+主线程3s)。

    以上就是Future在java中获取线程结果的方法,可以说Future在处理线程上比较灵活,机制大致为进行一个线程时,另一个线程同时运行。大家感兴趣的话,可以在课后深入了解。更多Java学习指路:java教程

    (本教程推荐操作环境:windows7系统、java10版,DELL G3电脑。)

    专题推荐:java future
    上一篇:java ReentrantLock的重入测试 下一篇:mybatis在java中的分页查询

    相关文章推荐

    • 如何理解Java中的Maven?• java数组插入元素的三种方法• java多线程中执行多个程序

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网