线程池用过吗?哪几种?

使用场景(大量短小)

  • 每次任务执行时间较短
  • 数据量大

为什么要用

  • 减少创建和摧毁线程时在时间和资源上的浪费
  • 创建太多线程容易造成内存不足,以及过度切换
    大多数服务器应用程序都是面向处理大量的短期任务或子任务,因此往往希望具有一种能够以低开销有效地处理这些任务的机制以及一些资源管理和定时可预见性的措施。线程池提供了这些优点

可能会有啥问题

  • 线程泄漏。
    • 当执行任务时抛出RuntimeException或error,而池类没有捕捉到他们,那么该线程就不能再用了。意味着该线程池的大小-1,如果频繁出现,线程池最终会为空,导致系统停止(因为没有线程可用)
    • 当比如一个线程是用来等待资源或监听用户输入,而资源可能一直不可用,又或者用户走了(并没有继续输入),那么这个线程就会一直被消耗着(也可能理解为被阻塞?)。解决方案:可以考虑创建属于自己的线程,或者设计超时时间(超过一定时间自动回收)。
  • 请求过载
    • 因为线程池线程数量有限,所以大量的任务才是需要排队到队列去等待,这样也会消耗太多的系统资源。解决方案可能快速失败,就是筛选掉一部分先。

有哪几种

  • newFixedThreadPool

    • 常用
    • 创建指定大小的线程池,有一个任务创建一个线程
    • 但线程数大于最大值时,则将新提交的任务放到池队列中(可以理解为阻塞)
  • newCachedThreadPool

    • 可缓存线程池,灵活
    • 原则上可无限创建线程,如果某个线程长时间(默认60s)没用,就自动终止该线程
    • 所以长时间闲置,并不会耗费啥资源(会自动终止),背后是SynchronousQueue做工作队列
  • newSingleThreadExecutor

    • 单线程
    • 只创建一条线程,保证顺序执行
    • 如果异常结束,就会创建一条新的
  • newScheduleThreadPool

    • 定长、定时、周期性(类似Timer)

https://www.jianshu.com/p/18b39a5f1868
https://www.cnblogs.com/gujiande/p/9488462.html
https://www.cnblogs.com/aaron911/p/6213808.html

全部评论

相关推荐

老粉都知道小猪猪我很久没更新了,因为秋招非常非常不顺利,emo了三个月了,接下来说一下我的情况吧本人是双非本 专业是完全不着计算机边的非科班,比较有优势的是有两段大厂实习,美团和字节。秋招面了50+场泡池子泡死的:滴滴 快手 去哪儿 小鹏汽车 不知名的一两个小厂其中字节13场 两次3面挂 两次2面挂 一次一面挂其中有2场面试题没写出来,其他的都是全a,但该挂还是挂,第三次三面才面进去字节,秋招加暑期总共面了22次字节,在字节的面评可以出成书了快手面了8场,2次实习的,通过了但没去,一次2面挂 最后一次到录用评估 至今无消息滴滴三面完 没几天挂了 所有技术面找不出2个问题是我回答不上来的,三面还来说我去过字节,应该不会考虑滴滴吧,直接给我干傻了去哪儿一天速通 至今无消息小鹏汽车hr 至今无消息美团2面挂 然后不捞我了,三个志愿全部结束,估计被卡学历了虾皮二面挂 这个是我菜,面试官太牛逼了拼多多二面挂 3道题也全写了 也没问题是回答不出来的 泡一周后挂腾讯面了5次 一次2面挂 三次一面挂,我宣布腾讯是世界上最难进的互联网公司然后还有一些零零散散的中小厂,但是数量比较少,约面大多数都是大厂。整体的战况非常惨烈,面试机会少,就算面过了也需要和各路神仙横向对比,很多次我都是那个被比下去的人,不过这也正常,毕竟谁会放着一个985的硕士不招,反而去招一个双非读化学的小子感觉现在互联网对学历的要求越来越高了,不仅仅要985还要硕士了,双非几乎没啥生存空间了,我感觉未来几年双非想要进大厂开发的难度应该直线上升了,唯一的打法还是从大二刷实习,然后苟个转正,不然要是去秋招大概率是炮灰。而且就我面字节这么多次,已经开始问很多ai的东西了,你一破本科生要是没实习没科研懂什么ai啊,纯纯白给了
不知名牛友_:爸爸
秋招你被哪家公司挂了?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务