昆仑弟子_面霸
08-15·后端开发·10年+
面试吊打面试官
面试官:你用过CompletableFuture吧?先说说它是干什么的我:它是Java8引入的异步编排工具,能把多个异步任务串起来,支持回调和组合,比Future灵活得多。面试官:那它和Future有什么本质区别?我:Future只能get阻塞拿结果,没法注册回调,也没法链式组合。CompletableFuture可以thenApply、thenCompose这些,任务完成后自动触发下一步,不用一直干等面试官:好。那你用下来,觉得它最容易踩的坑是什么?我:异常丢失面试官:详细说说?我:因为CompletableFuture内部把异常存到result字段里了,只有你主动去get、join,或者用exceptionaly、handle处理它才暴露。不然它就一直躺在那,线程也不报错面试官:怎么规避?我:在链路末尾加一个exceptionaly或者whenComplete,至少把异常打日志。另外如果用get,要带超时时间,别让它一直卡着面试官:说到卡,线程阻塞的问题你怎么看?我:我会自定义一个线程池,在thenApplyAsync这类方法里显式传进去面试官:还有别的坑吗?我:就是get和join的区别。join抛的是unchecked异常,get抛的是受检异常。我一般倾向用join,省得写try-catch。不过用join也得记得处理异常
发布于 广东
9
9
10
未登录
友善发言
image-upload
评论
加载中