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
暂无评论内容