业务并行处理示例
- 定义线程池
final static AtomicLong idGen = new AtomicLong(0);
static ExecutorService executor = new ThreadPoolExecutor(3, 3, 30, TimeUnit.SECONDS, new ArrayBlockingQueue<>(100), new ThreadFactory() {
@Override
public Thread newThread(Runnable cmd) {
Thread t = new Thread(cmd);
t.setName("t-prd-" + idGen.incrementAndGet());
return t;
}
});
复制代码
- 业务处理模拟
private static String process(ProductCommon product) {
return "当前线程:" + Thread.currentThread().getName() + ",处理结果测试:" + product.getProductId();
}
复制代码
- 核心三行代码并发处理
List<ProductCommon> products = Lists.newArrayList(p1, p2, p3);
List<CompletableFuture<String>> prdFutures = products.stream()
.map(i -> CompletableFuture.supplyAsync(() -> process(i), executor))
.collect(Collectors.toList());
List<String> prdResults = prdFutures.stream().map(CompletableFuture::join).collect(Collectors.toList());
复制代码
- 结果打印
当前线程:t-prd-1,处理结果测试:1
当前线程:t-prd-2,处理结果测试:2
当前线程:t-prd-3,处理结果测试:3
Process finished with exit code 0
复制代码
近期评论