使用多线程和不使用耗时进行对比
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<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);
}