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);}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部