V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mikael
V2EX  ›  Java

大家在实际开发中真正使用过线程池吗?

  •  2
     
  •   mikael · 2021-02-08 16:01:22 +08:00 · 5830 次点击
    这是一个创建于 1363 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人实际开发中就使用了一两次的线程池开发,主要就是开启线程读取数据库的操作。不知道大家有没有这方面的实际场景介绍下

    28 条回复    2021-02-20 17:10:10 +08:00
    ElmerZhang
        1
    ElmerZhang  
       2021-02-08 16:03:54 +08:00
    同时从多个下游服务取数据,用线程池并行取。
    SWALLOWW
        2
    SWALLOWW  
       2021-02-08 16:05:26 +08:00
    批量扫串口
    ferock
        3
    ferock  
       2021-02-08 16:06:41 +08:00
    池不一定。多线程经常用。。。多线程,爬基金数据,多线程扫描端口
    oneisall8955
        4
    oneisall8955  
       2021-02-08 16:06:49 +08:00 via Android
    一些异步 job 会用上
    chendy
        5
    chendy  
       2021-02-08 16:08:11 +08:00
    定时拉数据,数据量不是很大不需要上更严谨的任务框架,就线程池跑
    yamasa
        6
    yamasa  
       2021-02-08 16:18:47 +08:00
    Java 现在搞并发的选择并不算很多,线程池就是一种典型的,池化思想其实应用很广泛。搞并发可以上 reactor,vertx (也是 actor 模式的实现),线程池。即便是 reactor java 本身,底层也是要用到线程池来实现所有异步操作的。在 loom 的 fiber 真正出在 lts 之前,我觉得这个现状不会改变太多。协程也不是什么场景都优于线程的。
    应用场景可太多了啊,说的完? web 服务肯定是并发的,无非是应用哪种 IO 模型的问题而已。线程池可以说无处不在。
    Jooooooooo
        7
    Jooooooooo  
       2021-02-08 16:20:17 +08:00   ❤️ 1
    最常见的就是批量调下游
    wolfie
        8
    wolfie  
       2021-02-08 16:26:47 +08:00
    接口不影响返回结果且执行时间长的扔异步,定时任务。
    java8
        10
    java8  
       2021-02-08 16:51:03 +08:00
    消息推送
    stevenkang
        11
    stevenkang  
       2021-02-08 17:08:17 +08:00   ❤️ 2
    1 、批量查询类,如接口方不支持批量查询,自己封装一个稍微改善一下;
    2 、比较耗时又不是很重要的数据处理,如日志记录到数据库或者通过网络传输记录,可以开一个线程慢慢写,不影响主线程;
    3 、聚合多个 RPC 接口数据,比如要查 10 个接口,平均每个接口 500 毫秒的话,不开线程查的话主线程就超过 5000 了。这种直接整上 10 个线程啥的并行查询,主线程平均仅需 500 毫秒就能返回结果。
    4 、
    guoyuchuan
        12
    guoyuchuan  
       2021-02-08 17:13:57 +08:00
    1. 异步处理,将整体流程中的一些任务进行异步处理,可以使用线程池
    2. 针对某些资源,最近我们遇到的 sftp,就需要池化技术;
    presto
        13
    presto  
       2021-02-08 17:19:01 +08:00
    批处理异步并发查询 Presto,并且根据业务转发到不同的 Presto 集群查询
    presto
        14
    presto  
       2021-02-08 17:20:50 +08:00
    @stevenkang 我们就是这么做的查询报表 SQL,一个 SQL 随便加载数据就 TB 了
    mikael
        15
    mikael  
    OP
       2021-02-08 18:05:37 +08:00
    @yamasa 我知道线程池无处不在,只是小弟我接触的面不多,所以想向各位老哥了解一下大家使用的场景
    daozhihun
        16
    daozhihun  
       2021-02-08 19:34:57 +08:00
    这个用的还是挺多的,我最近在做的东西,我就用了好几种不同的线程池
    incompatible
        17
    incompatible  
       2021-02-08 20:43:40 +08:00 via iPhone
    @stevenkang 第三个场景使用线程池有效的前提是主线程并发不能高,否则当线程池的线程被占满后,由主线程发起的异步任务依然要排队执行,起不到通过并行加速的效果
    zqjnew
        18
    zqjnew  
       2021-02-08 20:52:09 +08:00 via Android   ❤️ 1
    可以把繁杂的计算交给固定数量线程池, 繁杂的 io 交给自动增长的线程池
    kingfalse
        19
    kingfalse  
       2021-02-08 20:59:19 +08:00 via Android
    爬虫开发,请求解析这些,全在线程池
    gaigechunfeng
        20
    gaigechunfeng  
       2021-02-08 22:21:21 +08:00
    强行在一个 app 上用过一次,还出了好几个 bug 。。。

    感觉一般的小项目,不考虑多线程一样完成。小项目就是实现业务即可,谁管你怎么实现的。
    cnzjl
        21
    cnzjl  
       2021-02-09 07:47:25 +08:00
    好多场景呢,批量处理任务,批量下游发送
    Aaronsunny
        22
    Aaronsunny  
       2021-02-09 09:30:53 +08:00
    好多吧。
    wangkai0351
        23
    wangkai0351  
       2021-02-09 09:42:47 +08:00
    早期(十几年前)做 Windows 应用软件开发程序员的基本功吧
    haon
        24
    haon  
       2021-02-09 15:33:32 +08:00
    异步任务用的比较多
    TeeMoCode
        25
    TeeMoCode  
       2021-02-09 15:45:11 +08:00
    用到过,比如说从对象服务器上使用线程池下载多个文件,所有文件下载完后再进行后续处理;耗时而又无需前端感知的任务丢到线程池中异步完成
    cabing
        26
    cabing  
       2021-02-18 11:16:48 +08:00
    异步解耦必用吧。
    线程池是基本的吧,都封装成包了。
    SkyLine7
        27
    SkyLine7  
       2021-02-19 11:03:22 +08:00
    @stevenkang 学习了!
    sss666
        28
    sss666  
       2021-02-20 17:10:10 +08:00
    resttemplate,异步任务
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2853 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 13:35 · PVG 21:35 · LAX 06:35 · JFK 09:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.