package com.thread.pr0;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class CallableAndFuture {
public static void main(String[] args) throws InterruptedException, ExecutionException {
Callable callableObj=new Callable() {
@Override
public Integer call() throws Exception {
long s1 = System.currentTimeMillis();
int sum=0;
for(int i=0;i<80000;++i){
for(int k=0;k<10000;++k){
sum+=k;
}
}
Thread.sleep(3000);
long s2 = System.currentTimeMillis();
System.out.println("异步线程的运算时间为===="+(s2-s1));//3292ms
return sum;
}
};
FutureTask futureTask = new FutureTask<>(callableObj);
long start = System.currentTimeMillis();
new Thread(futureTask).start();//运行一个异步线程计算sum值(并且假定计算sum值的过程是一个非常耗时的过程);
Thread.sleep(5000); //假设当前线程正在运行,此时异步线程和当前线程线程并行执行
System.out.println(futureTask.get());
long end = System.currentTimeMillis();
System.out.println(end-start); //总耗费时间为5013ms,已知主线程费时5000ms,异步线程费时3292ms,
//如果不使用异步线程计算结果,那么在主线程中按照执行顺序,会花费大概5000+3292=8292ms,
//由此可知对于消耗时间较大的但又不急于获取其的运算结果的计算,我们可以采用异步线程来计算并返回结果;
//当主线程需要运算结果时,再调取返回结果,
}
}
参考博客:
https://blog.csdn.net/ghsau/article/details/7451464?utm_source=app&app_version=4.15.0&code=app_1562916241&ulinkId=usr1mkqgl919blen



