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

相关推荐

暴走萝莉莉:这是社招场吧,作为HR说个实话:这个维护关系的意思是要有政府资源,在曾经的工作中通过人脉资源拿下过大订单的意思。这个有相关管理经验,意思也是真的要有同岗位经验。应酬什么的对于业务成交来说就算不乐意也是常态,就是要求说话好听情商高,酒量好。
点赞 评论 收藏
分享
勇敢的联想人前程似锦:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
评论
7
28
分享
牛客网
牛客企业服务