两种异步模式
在JAVA的并发编程中,会有两种异步编程模型
- 直接以异步的形式来并行运行其他的任务,不需要返回任务的结果数据
- 以异步的形式运行其他的任务,需要返回结果
我们只看一下有结果返回的模型
有结果的异步模型
1、使用Future实现异步结果返回
public class FutureDemo { public static void main(String[] args) throws ExecutionException, InterruptedException { ExecutorService executorService = Executors.newSingleThreadExecutor(); Future<String> future = executorService.submit(new Callable<String>() { @Override public String call() throws Exception { return "使用Future获取异步结果数据"; } }); System.out.println(future.get()); executorService.shutdown(); } }
2、使用FutureTask获取异步结果
public class FutureTaskDemo { public static void main(String[] args) throws ExecutionException, InterruptedException { FutureTask<String> futureTask=new FutureTask<>(new Callable<String>() { @Override public String call() throws Exception { return "使用FutureTask获取异步结果数据"; } }); new Thread(futureTask).start(); System.out.println(futureTask.get()); } }
FutureTask也可以结合线程池来使用
public class FutureTaskDemo { public static void main(String[] args) throws ExecutionException, InterruptedException { ExecutorService executorService = Executors.newSingleThreadExecutor(); FutureTask<String> futureTask = new FutureTask<>(new Callable<String>() { @Override public String call() throws Exception { return "使用FutureTask + Thread Pool获取异步结果数据"; } }); executorService.execute(futureTask); new Thread(futureTask).start(); System.out.println(futureTask.get()); } }