jdk8 CompletableFuture异步多线程简单使用,收集结果集示例
使用多线程和不使用耗时进行对比
1、使用多线程 耗时 130810 ms(毫秒)
public static void main(String[] args) {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();int defaultMaxPoolSize = 4;int defaultCorePoolSize = 4;taskExecutor.setCorePoolSize(defaultCorePoolSize);taskExecutor.setMaxPoolSize(defaultMaxPoolSize);taskExecutor.setAllowCoreThreadTimeOut(true);taskExecutor.setQueueCapacity(10);taskExecutor.setDaemon(true);taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());taskExecutor.setThreadFactory(new CustomizableThreadFactory("coa-Executor-"));taskExecutor.initialize();AtomicInteger atomicInteger = new AtomicInteger(0);long l = System.currentTimeMillis();List<String> objects = new ArrayList<>();for (int i = 0; i < 1000; i++) {
// try {
// Thread.sleep(2000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// atomicInteger.getAndAdd(1);objects.add("1");if (i!=0&&i%500==0){CompletableFuture[] completableFutures = objects.parallelStream().map(t ->CompletableFuture.supplyAsync(() -> {try {System.out.println(Thread.currentThread().getName()+"sleepsleepsleepsleepsleepsleepsleep");Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return 1;}, taskExecutor).whenComplete((k, v) -> {atomicInteger.getAndAdd(k);})).toArray(CompletableFuture[]::new);CompletableFuture<Void> voidCompletableFuture = CompletableFuture.allOf(completableFutures);// 开始阻塞等待执行完所有任务voidCompletableFuture.join();objects.clear();}}System.out.println("start block");CompletableFuture[] completableFutures = objects.parallelStream().map(t ->CompletableFuture.supplyAsync(() -> {return 1;}, taskExecutor).whenComplete((k, v) -> {atomicInteger.getAndAdd(k);})).toArray(CompletableFuture[]::new);CompletableFuture<Void> voidCompletableFuture = CompletableFuture.allOf(completableFutures);// 开始阻塞等待执行完所有任务voidCompletableFuture.join();objects.clear();System.out.println(atomicInteger.get());long l1 = System.currentTimeMillis();System.out.println(l1 - l);}
2、不使用多线程 耗时 2009721ms(毫秒)
public static void main(String[] args) {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();int defaultMaxPoolSize = 4;int defaultCorePoolSize = 4;taskExecutor.setCorePoolSize(defaultCorePoolSize);taskExecutor.setMaxPoolSize(defaultMaxPoolSize);taskExecutor.setAllowCoreThreadTimeOut(true);taskExecutor.setQueueCapacity(10);taskExecutor.setDaemon(true);taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());taskExecutor.setThreadFactory(new CustomizableThreadFactory("coa-Executor-"));taskExecutor.initialize();AtomicInteger atomicInteger = new AtomicInteger(0);long l = System.currentTimeMillis();List<String> objects = new ArrayList<>();for (int i = 0; i < 1000; i++) {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}atomicInteger.getAndAdd(1);
// objects.add("1");
// if (i!=0&&i%500==0){
// CompletableFuture[] completableFutures = objects.parallelStream()
// .map(t ->
// CompletableFuture.supplyAsync(() -> {
// try {
// System.out.println(Thread.currentThread().getName()+"sleepsleepsleepsleepsleepsleepsleep");
// Thread.sleep(2000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// return 1;
// }, taskExecutor)
// .whenComplete((k, v) -> {
// atomicInteger.getAndAdd(k);
// })
// ).toArray(CompletableFuture[]::new);
// CompletableFuture voidCompletableFuture = CompletableFuture.allOf(completableFutures);
// // 开始阻塞等待执行完所有任务
// voidCompletableFuture.join();
// objects.clear();
// }}System.out.println("start block");
// CompletableFuture[] completableFutures = objects.parallelStream()
// .map(t ->
// CompletableFuture.supplyAsync(() -> {
// return 1;
// }, taskExecutor)
// .whenComplete((k, v) -> {
// atomicInteger.getAndAdd(k);
// })
// ).toArray(CompletableFuture[]::new);
// CompletableFuture voidCompletableFuture = CompletableFuture.allOf(completableFutures);
// // 开始阻塞等待执行完所有任务
// voidCompletableFuture.join();
// objects.clear();System.out.println(atomicInteger.get());long l1 = System.currentTimeMillis();System.out.println(l1 - l);}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
