java后端实习面试,面试官提出的一个问题求解答

聊到线程池的时候,面试官问假如有一批任务需要放线程池,每个任务的执行时间不知道长短,任务量很多几万个,线程池放不下,怎么防止线程池或者内存oom

大概是这么个意思,当时不知道怎么解答就说了不会。

现在的想法不知道对不对,问一下大家
我现在的想法解答是,在这个程序的前面就应该采取一些措施避免同时创建这么多线程的需要,比如降流、用消息队列削峰等等

不知道对不对,求大佬们解答,感谢😬😬😬#2022春招#
全部评论
我个人理解: 首先询问面试官,任务是否重要、是否可以丢失,如果可以丢失,直接采取丢掉的拒绝策略 如果重要,即不能丢失 首先,在创建线程池的时候,我们选择的任务队列一定不要是无界的,这种场景使用无界oom应该跑不掉了 然后,实现rejectHandler接口,自定义拒绝策略(对于线程池无法装下的任务,暂时可以放到消息队列或者redis 缓存中,找一个不丢失任务的容器即可),当任务执行后写一个回调函数,去我们的redis或者消息队列中查看相应的key是否存在任务,存在则取回任务,让线程池继续执行,否则说明任务都执行完
15 回复 分享
发布于 2022-03-02 15:43
这个你应该看看任务的执行时间,如果任务执行时间比较短的话,需要设置合理的核心线程数来防止线程频繁上下文切换。如果执行时间比较长的话,就需要限流 这是我的想法😁
1 回复 分享
发布于 2022-02-22 01:57
插眼,这里要考虑是CPU密集任务还是io密集任务,tob 项目还是toc项目吧,降流削峰啥的对自发创建这么多任务的项目意义不大吧
点赞 回复 分享
发布于 2022-02-17 12:24
线程池中的阻塞队列我觉得是一个解决方案,换成有界阻塞队列,配置有界队列大小。
点赞 回复 分享
发布于 2022-02-17 15:34
你这个问题值得思考,我蹲一下,看看大佬们都怎么想
点赞 回复 分享
发布于 2022-02-17 20:36

相关推荐

沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
评论
7
28
分享
牛客网
牛客企业服务