Future在java中获取线程结果

美女程序员鼓励师

1、概念

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

2、Future接口

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

3、实例

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电脑。)

以上是 Future在java中获取线程结果 的全部内容, 来源链接: utcz.com/z/543211.html

回到顶部