Future在java中获取线程结果

1、概念

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

2、Future接口

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

3、实例

packagetest;

importjava.util.concurrent.Callable;
importjava.util.concurrent.ExecutionException;
importjava.util.concurrent.FutureTask;

publicclassCallableFutureTest{

publicstaticvoidmain(String[]args){
longstartTime=System.currentTimeMillis();
Callable<Integer>calculateCallable=newCallable<Integer>(){
@Override
publicIntegercall()throwsException{
//TODOAuto-generatedmethodstub
Thread.sleep(2000);//模拟耗时时间
intresult=1+2;
returnresult;
}
};
FutureTask<Integer>calculateFutureTask=newFutureTask<>(calculateCallable);
Threadt1=newThread(calculateFutureTask);
t1.start();
//现在加入Thread运行的是一个模拟远程调用耗时的服务,并且依赖他的计算结果(比如网络计算器)
try{
//模拟耗时任务,主线程做自己的事情,体现多线程的优势
Thread.sleep(3000);
inta=3+5;
Integerresult=calculateFutureTask.get();
System.out.println("result="+(a+result));//模拟主线程依赖子线程的运行结果
longendTime=System.currentTimeMillis();
System.out.println("time="+(endTime-startTime)+"ms");
}catch(InterruptedException|ExecutionExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}

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

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

原文来自:https://www.py.cn
© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容