3

多线程怎么入门?

 8 months ago
source link: https://www.v2ex.com/t/1003517
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

多线程怎么入门?

  looveh · 15 小时 12 分钟前 · 1786 次点击

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

29 条回复    2023-12-27 04:43:37 +08:00
emSaVya

emSaVya      15 小时 8 分钟前

java 可以看看 Java Concurrency in Practice
laaaaaa

laaaaaa      14 小时 57 分钟前

看看 Netty 吧,先看它解决什么问题,在模拟场景去实战
murmur

murmur      14 小时 55 分钟前   ❤️ 2

写点什么秒杀、支付、库存之类的就明白了,虽然秒杀也写烂了但是大并发秒杀+库存还是很考验人的

其实现在的大公司也不会写严格的锁,性能太差了,超售直接砍单就完了,pdd 那么砍单不一堆人还是吹
jonasjiang23

jonasjiang23      14 小时 53 分钟前

主要是你没什么应用场景,所以不知道怎么入门;
多去 b 站找到培训视频看看吧,这样以后面试也懂一点
mawerss1

mawerss1      14 小时 52 分钟前

找个操作系统的课看看
jonasjiang23

jonasjiang23      14 小时 51 分钟前

光是看 Java Concurrency 并发编程,你看了三个章节,可能还是有点迷糊,到底什么业务场景要用并发;
looveh

looveh      14 小时 6 分钟前

@jonasjiang23 说的挺对,就是没有业务场景。不知道怎么实现
looveh

looveh      14 小时 6 分钟前

@mawerss1 要到这么底层么
looveh

looveh      14 小时 5 分钟前

@emSaVya 有电子书么
heiya

heiya      12 小时 14 分钟前

我的建议是从操作系统共享变量、锁那块看起,理解之后看《 Java 并发编程实践》
NewYear

NewYear      12 小时 13 分钟前

楼上说的秒杀的场景,其实可以顺序入库,但是不直接返回数据,过几秒显示结果,确定每个用户下单的顺序,然后删掉额外的就可以了,也不会影响用户体验。

电商的库存这块不是很好弄,但是看需求吧,例如说是以下单为准,还是要以付款为准,付款的时间限制又是什么。
looveh

looveh      10 小时 9 分钟前

@heiya 操作系统听着就感觉好大好难的样子😰
nice2cu

nice2cu      10 小时 7 分钟前

公司数据量大、业务稍微复杂点的话,多线程还是很常见的呀
sjtulyj

sjtulyj      10 小时 1 分钟前

rust 中的多线程根本就不需要学
looveh

looveh      10 小时 1 分钟前

@nice2cu 没碰到过😂之前做企业福利,也是类似电商都没碰到过
chenqh

chenqh      9 小时 55 分钟前

@murmur 难道不是超售就超售吗?双 11 哪个商店敢拒绝阿里的超售需求呢
kingwrcy

kingwrcy      9 小时 49 分钟前

业务场景自己随便造一个不就有了?
比如某接口是个聚合统计接口,依赖外部 10 个接口的数据。
现在需要你并发 10 个线程异步获取外部 10 个接口的数据。
拿到全部的 10 个结果后,对结果做加工,入库。

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

再比如跑批任务,每天需要对 100 万数据进行清洗,单线程清洗,可能一天都跑不完,需要多线程跑。
那问题来了,如果让每个线程只负责其中一部分数据,涉及到数的分而治之,并且全部清洗完完成后还要执行后续逻辑。
这也是个非常基础的多线程场景。
guo4224

guo4224      9 小时 48 分钟前 via iPhone

买本 apue 翻翻
wangkun025

wangkun025      9 小时 35 分钟前

握手啊。
我也不懂。
zapper

zapper      9 小时 34 分钟前

多线程你不一定要用 java 啊。找个什么 python 多线程跑个下载任务或者爬虫玩玩。一上来就锁来锁去的反而更不明白了
looveh

looveh      9 小时 15 分钟前

@zapper python 我语法都不会😭
giter

giter      9 小时 12 分钟前

@looveh #8 多线程涉及到挺多《操作系统》这本书里的内容的,考研 408 的书都挺重要
siweipancc

siweipancc      7 小时 39 分钟前 via iPhone

写个玩具,爬 e 站的本子
1. 要求打满带宽
2. 输出统计数据到文档
3. 实时显示任务完成占比
wlm201219

wlm201219      7 小时 30 分钟前

@siweipancc 放过 e 站吧,换个没良心的网站练手
kneo

kneo      7 小时 29 分钟前 via Android

一个多线程有什么学不明白的?随便入门书或者教程读一遍抄一遍代码不就完了?我看你就是懒。
xrzxrzxrz

xrzxrzxrz      7 小时 28 分钟前

@heiya 同意,我觉得不是业务的问题。是基础的问题。把操作系统学一下,理解系统是怎么运行的,就能理解多线程这些。
shawnsh

shawnsh      7 小时 27 分钟前 via Android

跟培训和学历有个锤子关系,想学基本概念就看操作系统。想速成就搜索相关的书籍。
cyanray

cyanray      1 小时 14 分钟前

《操作系统导论》作者: [美] Remzi H. Arpaci-Dusseau / [美] Andrea C. Arpaci-Dusseau 出版社: 人民邮电出版社
这本书写的很好,也没有翻译腔。不推荐看别人的项目说明、博客笔记来学习这些比较基础的东西,会错过很多细节。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK