public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService executor = Executors.newFixedThreadPool(1);
try {
//异步执行任务
Callable callable = new FutureCallable(new FutureInfo());
FutureTask<FutureInfo> task = new FutureTask<>(callable);
//任务提交给线程池
executor.submit(task);
//任务是否已经执行完毕
boolean isDone = task.isDone();
//任务是否取消
boolean isCanceller = task.isCancelled();
//取消任务(true 强制停止,false已经开始的任务不会停止)
// task.cancel(true);
//获取结果的时候会柱塞等待结果
FutureInfo chuju = task.get();
}finally {
executor.shutdown();
}
}
}
public class FutureCallable implements Callable {
private FutureInfo info;
public FutureCallable(FutureInfo info) {
this.info = info;
}
@Override
public FutureInfo call() throws Exception {
Thread.sleep(5000);
info.mm += 10;
return this.info;
}
}
spring boot Async异步调用
1、启动类添加 @EnableAsync
2、异步调用类设置future返回值
@Component
public class DealHave {
@Async
public Future<String> dealHve(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("执行3秒");
return new AsyncResult<String>("异步调用返回");
}
}
@Autowired
DealHave dealHave;
public void getFutureMessage() throws ExecutionException, InterruptedException {
Future<String> future = dealHave.dealHve();
//任务是否已经执行完毕
boolean isDone = future.isDone();
//任务是否取消
boolean isCanceller = future.isCancelled();
//取消任务(true 强制停止,false已经开始的任务不会停止)
// future.cancel(true);
//获取结果的时候会柱塞等待结果
String chuju = future.get();
}