public class ListenableFutureExample { public static void main(String[] args) throws ExecutionException, InterruptedException { ExecutorService service = Executors.newFixedThreadPool(2); ///执行结束,这个需要主动去拿,是阻塞的数据 getIdirect(service); //通过回调去拿数据 getCallBack(service); getJava8(service); } //jdk1.8 ForkJoin是任务的分发处理 private static void getJava8(ExecutorService service) { //默认使用的是ForkJoinPool,如果不传线程池的话 CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } return 100; }, service).whenComplete((v, t) -> System.out.println(v)); //V --->返回的结果 //t--->可能出现的异常 // future.whenComplete((v, t) ->) } //Guava private static void getCallBack(ExecutorService service) { ListeningExecutorService listeningExecutorService = MoreExecutors.listeningDecorator(service); ListenableFuture<Integer> future = listeningExecutorService.submit(() -> { try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } return 100; }); //runnable--->DB future.addListener(() -> { }, service); //CallAble处理 Futures.addCallback(future, new MyCallBack(), service); System.out.println("======================="); } //回调处理 static class MyCallBack implements FutureCallback<Integer> { @Override public void onSuccess(Integer result) { System.out.println("I am finish the result is " + result); } @Override public void onFailure(Throwable throwable) { throwable.printStackTrace(); } } //Jdk public static Integer getIdirect(ExecutorService service) throws ExecutionException, InterruptedException { Future<Integer> future = service.submit(() -> { try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } return 10; }); Integer result = future.get(); System.out.println(result); return result;//执行结束,这个需要主动去拿,那么怎么通过回调去拿 } }
08-05
08-05