ThreadPoolExecutor配合CompletableFuture提高并发处理
关于CompletableFuture的介绍参考博文:java线程池ThreadPoolExecutor与四种常见线程池
对线程池ThreadPoolExecutor有多种选择,如:ThreadPoolExecutor、newFixedThreadPool()、newSingleThreadExecutor()、newCachedThreadPool()、newScheduledThreadPool
。对线程池的详细了解参考:java线程池ThreadPoolExecutor与四种常见线程池
CompleteableFuture基于jdk8。提高程序吞吐量,异步处理请求。
示例为对一个对象的输出,实现如下。
实体类及其正常输出与异步输出耗时对比
package threads.completableFutureAndExecutor.noThreadPool;
import java.util.Random;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Future;
public class Shop {
Random random = new Random();
private String name;
public String getName() {
return name;
}
//constructor
public Shop(String name) {
super();
this.name = name;
}
public static void delay() {
try {
Thread.sleep(1000L);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public double getPrice() {
delay();
return random.nextDouble() * 100;
}
/**
* 1.将getPrice()方法转为异步调用。
* 2.supplyAsync参数是一个生产者。Supplier 没有参数返回一个对象。若lambda没有参数并且可以返回对象则满足
* 3.supplyAsync内部对Supplier方法对异常进行处理,避免因为异常程序永久阻塞。
* */
public Future<Double> getPriceAsync(String product){
return CompletableFuture.supplyAsync(()->getPrice());
}
/*
*异步优势示例
*/
public static void main(String[] args) throws Exception{
Shop shop = new Shop("bestShop");