1.1 KiB
1.1 KiB
问题1(考察多线程)
假设你现在需要写1个电商APP的用户订单详情接口,这个详情页包含:
- 关联的商品信息,比如商品名称、尺码、图片、文字介绍等等
- 订单的基础信息,比如创建时间、支付金额
- 订单的快递信息,比如从上海运往杭州,目前运输车辆的位置
这三种数据,彼此之间不耦合,假定每一个查询耗时1秒,单线程的情况下,同步执行三次查询,则需要3秒,如何加速这个查询?
答案:多线程并行查询,实现方案
- CompletableFuture,allOf、runAsync、supplyAsync函数
- Future或者FutureTask,轮询isDone函数,确保异步任务执行完毕,若有返回值,使用get函数获取结果
如果回答的是CompletableFuture,继续延伸以下问题:
- CompletableFuture的默认线程池是什么?答案:ForkJoinPool
- ForkJoinPool适合CPU密集型还是IO密集型任务?答案:CPU密集型
- 用CompletableFuture处理IO密集型的任务,应该怎么做?答案:自定义一个IO密集型的线程池