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

多线程怎么入门?

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

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

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

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

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

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

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