需求背景:第三方请求服务后,异步处理请求,先返回请求方请求成功,后开启线程执行task并获取执行后的结果。故选用FutureTask来解决。
注意:定义调用方法的时候,定义call方法中需要的入参时,调用方法的形参是要定义成final类型的。
public class FutureTaskAndThreadPoolExecuteTest {
public static void main(String[] args) throws Exception {
function("bxq");
}
public static String function(final String ss) throws Exception{
FutureTask<String> futureTask = new FutureTask<String>(new Callable<String>() {
@Override
public String call() throws Exception {
System.out.println("do something in callable!");
Thread.sleep(5000);
return ss;
}
});
ExecutorService executorService = Executors.newCachedThreadPool();
executorService.submit(futureTask);
System.out.println("do something in main!");
Thread.sleep(1000);
String s = futureTask.get();
System.out.println("result:"+s);
return s;
}
}
网友评论