• 请不要在回答技术问题时复制粘贴 AI 生成的内容
looveh
V2EX  ›  程序员

多线程怎么入门?

  •  
  •   looveh · Dec 26, 2023 · 4770 views
    This topic created in 873 days ago, the information mentioned may be changed or developed.

    我是一个培训机构出来的 Java 开发,第一学历高中。不怕大家笑话,工作 6 ,,7 年了感觉自己对多线程还是似懂非懂的状态。有没有大佬能教一下多线程应该怎么入门啊?什么时候该用多线程提升性能?什么情况下该用锁?什么情况下不需要用锁?我心里一点没底。

    37 replies    2023-12-27 13:56:34 +08:00
    emSaVya
        1
    emSaVya  
       Dec 26, 2023
    java 可以看看 Java Concurrency in Practice
    laaaaaa
        2
    laaaaaa  
       Dec 26, 2023
    看看 Netty 吧,先看它解决什么问题,在模拟场景去实战
    murmur
        3
    murmur  
       Dec 26, 2023   ❤️ 2
    写点什么秒杀、支付、库存之类的就明白了,虽然秒杀也写烂了但是大并发秒杀+库存还是很考验人的

    其实现在的大公司也不会写严格的锁,性能太差了,超售直接砍单就完了,pdd 那么砍单不一堆人还是吹
    jonasjiang23
        4
    jonasjiang23  
       Dec 26, 2023
    主要是你没什么应用场景,所以不知道怎么入门;
    多去 b 站找到培训视频看看吧,这样以后面试也懂一点
    mawerss1
        5
    mawerss1  
       Dec 26, 2023
    找个操作系统的课看看
    jonasjiang23
        6
    jonasjiang23  
       Dec 26, 2023
    光是看 Java Concurrency 并发编程,你看了三个章节,可能还是有点迷糊,到底什么业务场景要用并发;
    looveh
        7
    looveh  
    OP
       Dec 26, 2023
    @jonasjiang23 说的挺对,就是没有业务场景。不知道怎么实现
    looveh
        8
    looveh  
    OP
       Dec 26, 2023
    @mawerss1 要到这么底层么
    looveh
        9
    looveh  
    OP
       Dec 26, 2023
    @emSaVya 有电子书么
    heiya
        10
    heiya  
       Dec 26, 2023
    我的建议是从操作系统共享变量、锁那块看起,理解之后看《 Java 并发编程实践》
    NewYear
        11
    NewYear  
       Dec 26, 2023
    楼上说的秒杀的场景,其实可以顺序入库,但是不直接返回数据,过几秒显示结果,确定每个用户下单的顺序,然后删掉额外的就可以了,也不会影响用户体验。

    电商的库存这块不是很好弄,但是看需求吧,例如说是以下单为准,还是要以付款为准,付款的时间限制又是什么。
    looveh
        12
    looveh  
    OP
       Dec 26, 2023
    @heiya 操作系统听着就感觉好大好难的样子😰
    nice2cu
        13
    nice2cu  
       Dec 26, 2023
    公司数据量大、业务稍微复杂点的话,多线程还是很常见的呀
    sjtulyj
        14
    sjtulyj  
       Dec 26, 2023
    rust 中的多线程根本就不需要学
    looveh
        15
    looveh  
    OP
       Dec 26, 2023
    @nice2cu 没碰到过😂之前做企业福利,也是类似电商都没碰到过
    simple2025
        16
    simple2025  
       Dec 26, 2023
    @murmur 难道不是超售就超售吗?双 11 哪个商店敢拒绝阿里的超售需求呢
    kingwrcy
        17
    kingwrcy  
       Dec 26, 2023
    业务场景自己随便造一个不就有了?
    比如某接口是个聚合统计接口,依赖外部 10 个接口的数据。
    现在需要你并发 10 个线程异步获取外部 10 个接口的数据。
    拿到全部的 10 个结果后,对结果做加工,入库。

    如果你单线程,那就耗时很久,如果多线程,如何控制 10 个线程全部结束再执行你的后续代码。
    这个就是一个非常基础的多线程场景。

    再比如跑批任务,每天需要对 100 万数据进行清洗,单线程清洗,可能一天都跑不完,需要多线程跑。
    那问题来了,如果让每个线程只负责其中一部分数据,涉及到数的分而治之,并且全部清洗完完成后还要执行后续逻辑。
    这也是个非常基础的多线程场景。
    guo4224
        18
    guo4224  
       Dec 26, 2023 via iPhone
    买本 apue 翻翻
    wniming
        19
    wniming  
       Dec 26, 2023
    wangkun025
        20
    wangkun025  
       Dec 26, 2023
    握手啊。
    我也不懂。
    zapper
        21
    zapper  
       Dec 26, 2023   ❤️ 1
    多线程你不一定要用 java 啊。找个什么 python 多线程跑个下载任务或者爬虫玩玩。一上来就锁来锁去的反而更不明白了
    looveh
        22
    looveh  
    OP
       Dec 26, 2023
    @zapper python 我语法都不会😭
    giter
        23
    giter  
       Dec 26, 2023
    @looveh #8 多线程涉及到挺多《操作系统》这本书里的内容的,考研 408 的书都挺重要
    siweipancc
        24
    siweipancc  
       Dec 26, 2023 via iPhone
    写个玩具,爬 e 站的本子
    1. 要求打满带宽
    2. 输出统计数据到文档
    3. 实时显示任务完成占比
    09an6YfX8rNvIG92
        25
    09an6YfX8rNvIG92  
       Dec 26, 2023
    @siweipancc 放过 e 站吧,换个没良心的网站练手
    kneo
        26
    kneo  
       Dec 26, 2023 via Android
    一个多线程有什么学不明白的?随便入门书或者教程读一遍抄一遍代码不就完了?我看你就是懒。
    xrzxrzxrz
        27
    xrzxrzxrz  
       Dec 26, 2023
    @heiya 同意,我觉得不是业务的问题。是基础的问题。把操作系统学一下,理解系统是怎么运行的,就能理解多线程这些。
    shawnsh
        28
    shawnsh  
       Dec 26, 2023 via Android
    跟培训和学历有个锤子关系,想学基本概念就看操作系统。想速成就搜索相关的书籍。
    cyanray
        29
    cyanray  
       Dec 27, 2023   ❤️ 1
    《操作系统导论》作者: [美] Remzi H. Arpaci-Dusseau / [美] Andrea C. Arpaci-Dusseau 出版社: 人民邮电出版社
    这本书写的很好,也没有翻译腔。不推荐看别人的项目说明、博客笔记来学习这些比较基础的东西,会错过很多细节。
    lyxxxh2
        30
    lyxxxh2  
       Dec 27, 2023
    你只是要用多线程 问 gpt 直接用
    别看什么底层书籍
    8355
        31
    8355  
       Dec 27, 2023
    1.你需要实现一个中台接口,并行调用内部和外部多和接口并将接口返回值进行拼接返回。理论上要求你接口的响应时间略高于响应时间最长接口的时间。
    2.前台有一个接口接收第三方的回调数据存入数据表,你需要在后台脚本尽可能的实时扫表处理每条数据,要求是不能重复处理,需要准实时处理。
    3.大批量发送站内信/app push/短信/邮件
    4.excel 导入大表,高效清洗组装数据入库
    5.电商系统风控模型,需要根据用户行为/下单/登陆/历史订单/地址/支付等多种信息判断该订单是否需要风控拦截。
    heiya
        32
    heiya  
       Dec 27, 2023
    @looveh 学起来不难,市面上有关的书籍很多,知识都比较固定,这也是必须要学的。学完之后对理解多线程很有帮助。然后在这个基础上学《 Java 并发编程实践》。
    looveh
        33
    looveh  
    OP
       Dec 27, 2023
    @kneo 这个总结的好,不过确实是我的痛点
    looveh
        34
    looveh  
    OP
       Dec 27, 2023
    @8355 我之前设计一个消息推送的服务就是类似第 3 点,但是用到了消息队列。多线程方面好像没用。
    looveh
        35
    looveh  
    OP
       Dec 27, 2023
    @heiya 我感觉好难啊,特别是文字较多的话我看着看着就要睡觉。纸质书籍基本看不下去
    looveh
        36
    looveh  
    OP
       Dec 27, 2023
    @kingwrcy 你这种的话我倒是之前用 Java 的 CompletedFeature 实现过,有个接口有很多个统计。但是虽然用了,万一出现问题甚至都不知道原因是啥
    8355
        37
    8355  
       Dec 27, 2023
    @looveh #34 如果不用消息队列如何处理,就是单表查数据如何更平均高效的并行处理,这个才是你想了解的问题核心吧,假设有 2 台机器提供部署,每个应用启动 10 个线程,20 个线程该如何均匀的处理 100 万条消息以达到最快的处理速度,并且不重复处理。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3093 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 91ms · UTC 12:43 · PVG 20:43 · LAX 05:43 · JFK 08:43
    ♥ Do have faith in what you're doing.