3. CompletableFuture实现异步 publicclassCompletableFutureCompose{/** * thenAccept子任务和父任务公用同一个线程 */@SneakyThrowspublicstaticvoidthenRunAsync(){ CompletableFuture<Integer> cf1 = CompletableFuture.supplyAsync(() -> { System.out.println(Thread.currentThread() + " cf1 do somethin...
13:39:32.976[main]INFOcom.neo.DemoCompletableFuture-CompletableFuture.supplyAsync 开始13:39:37.985[ForkJoinPool.commonPool-worker-9]INFOcom.neo.DemoCompletableFuture-@@ 打印执行耗时:5011ms13:39:37.986[main]INFOcom.neo.DemoCompletableFuture-CompletableFuture.supplyAsync 执行结果:113:39:37.990[main]INFOcom....
2、supplyAsync / runAsync supplyAsync表示创建带返回值的异步任务的,相当于ExecutorService submit(Callable<T> task) 方法,runAsync表示创建无返回值的异步任务,相当于ExecutorService submit(Runnable task)方法,这两方法的效果跟submit是一样的,测试用例如下: @Test public void test2() throws Exception { // 创建异...
supplyAsync表示创建带返回值的异步任务的,相当于ExecutorService submit(Callable<T> task) 方法, runAsync表示创建无返回值的异步任务,相当于ExecutorService submit(Runnable task)方法. 这两方法的效果跟submit是一样的,测试用例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...
其中supplyAsync用于有返回值的任务,runAsync则用于没有返回值的任务。Executor参数可以手动指定线程池,否则默认ForkJoinPool.commonPool()系统级公共线程池, 注意:这些线程都是Daemon线程,主线程结束Daemon线程不结束,只有JVM关闭时,生命周期终止 主动完成计算
CompletableFuture 实现了 Future 和 CompletionStage 接口, 并提供了多种实现异步编程的方法,如supplyAsync, runAsync以及thenApplyAsync。 下面我们使用CompletableFuture来实现上面的例子: CompletableFuture<Long> completableFuture = CompletableFuture.supplyAsync(() ->factorial(number));while(!completableFuture.isDone()...
2、supplyAsync / runAsync supplyAsync表示创建带返回值的异步任务的,相当于ExecutorService submit(Callable<T> task) 方法,runAsync表示创建无返回值的异步任务,相当于ExecutorService submit(Runnable task)方法,这两方法的效果跟submit是一样的,测试用例如下: ...
1. supplyAsync supplyAsync是创建带有返回值的异步任务。它有如下两个方法,一个是使用默认线程池(ForkJoinPool.commonPool())的方法,一个是带有自定义线程池的重载方法 // 带返回值异步请求,默认线程池 public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier) ...
2、supplyAsync / runAsync supplyAsync表示创建带返回值的异步任务的,相当于ExecutorService submit(Callable<T> task)方法,runAsync表示创建无返回值的异步任务,相当于ExecutorService submit(Runnable task)方法,这两方法的效果跟submit是一样的,测试用例如下:
这个例子中,simulateTask模拟了一个耗时操作,比如从数据库加载数据。使用supplyAsync,咱们就能在另一个线程中执行这个任务,而主线程可以继续做其他事情。 2. 使用runAsync 如果咱们不关心异步任务的结果,只想执行一个异步操作,那就可以用runAsync。它接受一个Runnable函数接口,不返回任何结果: ...