package com.sankuai.mop.testtwo.service.lianxi.future; import com.google.common.collect.Lists; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; /** * @author kaura */ public class Futures { public static void main(String[] args) throws ExecutionException, InterruptedException, TimeoutException { AtomicInteger a = new AtomicInteger(0); ThreadPoolExecutor executor = new ThreadPoolExecutor( 50, 100, 1000, TimeUnit.SECONDS, new ArrayBlockingQueue<>(16), new ThreadPoolExecutor.CallerRunsPolicy()); CompletableFuture<Boolean> cf = CompletableFuture.supplyAsync(() -> { System.out.println(Thread.currentThread().getName() + "start-time" + System.currentTimeMillis()); try{ Thread.sleep(2000); } catch (Exception e) { e.printStackTrace(); } return true; }, executor); System.out.println(cf.get()); CompletableFuture<Boolean> cfthen = cf.thenApply((result) -> false); List<CompletableFuture<Void>> futureList = new ArrayList<>(); List<Integer> list = Lists.newArrayList(); List syncList = Collections.synchronizedList(list); for (int i = 0; i < 100000; i++) { CompletableFuture future = CompletableFuture.runAsync(() -> { System.out.println(Thread.currentThread().getName() + "start-time" + System.currentTimeMillis()); try{ a.addAndGet(1); syncList.add(1); } catch (Exception e) { e.printStackTrace(); } }, executor); futureList.add(future); } //executor.shutdown(); CompletableFuture.allOf(futureList.toArray(new CompletableFuture[futureList.size()])) .get(1500, TimeUnit.MILLISECONDS); System.out.println(a); System.out.println(syncList.size()); } }
CompletableFuture 简单使用案例
于 2023-05-11 18:41:55 首次发布