QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

从事 Java 开发 5 年,才意识到“学好并发”的重要性 | 极客时间

  • 2019-06-24
  • 本文字数:2490 字

    阅读完需:约 8 分钟

从事 Java 开发 5 年,才意识到“学好并发”的重要性 | 极客时间

你好,我是 Zed,是《Java 并发编程实战》1W+订阅者中的一员。


我从事 Java 开发已有五年时间了,曾在一家国内知名物流企业工作,现在杭州一家金融支付类公司继续担任 Java 工程师一职。


大概在今年四月份,在高铁上翻到一篇文章,讲的是“为什么 Object.wait()方法一定要在 synchronized 内部使用”,因为之前我根本不知道这个问题,所以打算考考我朋友。


结果他给了我一些迥然不同的答案,他邀请我读了宝令老师的《Java 并发编程实战》专栏中的一篇文章《08 | 管程:并发编程的万能钥匙》,看完后我感觉醍醐灌顶,津津有味,果断开始学习。

我是如何通过专栏拿到 Offer 的?

机缘巧合,专栏学习到一半时 ,我辞掉了原有的工作出去面试。因为面试的岗位都是高级工程师,所以基本上离不开并发编程的问题,像锁、线程安全、线程池、并发工具类都是家常便饭。


印象比较深刻的是面试官问我:线程池的大小如何确定?


那时我刚看完《10|Java线程(中): 创建多少线程才是合适的?》,然后就胸有成竹且不紧不慢地回答了,面试官听了直点头。


另外一个问题是:怎么理解活锁?


于是,我又如法炮制搬出了《07|安全性、活跃性以及性能问题》中老师提到“路人甲乙相撞”的例子,同时给出具体的解决方案。


不得不说,这个例子太经典了,这里我必须再展示给大家看!在文章里老师是这样描述活锁的:


所谓的“活锁”,可以类比现实世界里的例子。路人甲从左手边出门,路人乙从右手边进门,两人为了不相撞,互相谦让,路人甲让路走右手边,路人乙也让路走左手边,结果是两人又相撞了。



这种情况,基本上谦让几次就解决了,因为人会交流啊。可是如果这种情况发生在编程世界了,就有可能会一直没完没了地“谦让”下去,成为没有发生阻塞但依然执行不下去的“活锁”。


并且给出了简单有效的解决方案


解决“活锁”的方案很简单:谦让时,尝试等待一个随机的时间就可以了。



例如上面的那个例子,路人甲走左手边发现前面有人,并不是立刻换到右手边,而是等待一个随机的时间后,再换到右手边;同样,路人乙也不是立刻切换路线,也是等待一个随机的时间再切换。由于路人甲和路人乙等待的时间是随机的,所以同时相撞后再次相撞的概率就很低了。



“等待一个随机时间”的方案虽然很简单,却非常有效,Raft 这样知名的分布式一致性算法中也用到了它。


真的很庆幸提前遇到了并发专栏,我的面试顺利通过了。


我可以很负责任地说,如果没有专栏的学习,我不会那么顺利地找到工作。换句话说,专栏其实涵盖了几乎所有大家面试可能会被问到的内容。(文末有专栏的优惠活动,有兴趣的直接拉到下面)

我是如何进行高效学习的?

第一,直接上手跟着敲一遍代码。

我觉得最能表示你在用心学习的方式就是付诸实际行动了,就拿专栏第一模块“并发理论基础”来讲,会涉及到很多的例子,比如:



针对这些例子,我能做的就是自己花时间,手动敲一遍代码。要知道,纸上得来终觉浅,绝知此事要躬行!

第二,换位理解。

这也是我觉得最为有效的学习方式之一,站在老师角度,去思考他是如何看这个问题的,他是如何一步步讲解清楚的。而且,宝令老师在每篇文章后面,都会有一段总结,非常有效地来帮助我去获得这篇文章的知识点。提出问题—解决问题—总结得出结论,这关键 3 步,在任何地方都适用。


所以,我还会花时间思考专栏的“这里”或“那里”跟我之前的理解是否有出入,例如《11 | Java线程(下):为什么局部变量是线程安全的?》中对局部变量线程安全的解释,跟自己了解的虚拟机执行过程变量共享关系是否吻合?


反复问自己问题的答案是什么,然后和老师的理解做对比,收获感和进步才会是巨大的。

第三,坚持,坚持,再坚持。

学习最难的也是最有价值的一点就是“坚持”了,这一点毋庸置疑,所以每天我都会主动去看专栏,包括相关书籍以及网上的各类资料。学习到新的知识是一件多么幸福的事情,每天一点点,这日积月累下来就是一笔不小的财富。我们办公室就有一个有趣的墙画,内容就是:


1.01^365=37.8;


而 1.02^365=1 377.4。


每天跟着专栏去渗透,每一句话都读得很细致,每次看到后一句忘记前面说的都会返回去再读一遍直到弄懂为止。知识一定要彻底掌握才能被更好地使用,这是我个人的要求。需要补充一句,学习的时候切记要结合源码去看,事半功倍

再说专栏的 2 个宝藏之地

除此之外,还有两个我很喜欢的、也很激励我学习的点。


第一个,每一篇文章最后都会有思考题,而思考题的背后就是众多同学的头脑风暴。


每篇文章的留言我都会细细去看,看同学们的回答以及提问我是否了解,如果了解,就暗暗地“得意”一番;如果没有,那就说明我还没完全弄明白,路漫漫仍需继续努力。


所以,留言区也是一个宝藏之地,有些同学的回答甚至可能比老师举的例子更加让人印象深刻,例如《01 | 可见性、原子性和有序性问题:并发编程Bug的源头》下的留言,两个字,精彩!当初读完第一章的时候我就暗下决心,绝不能输给这些同学。


这也侧面反映了一点:自己拿一本书去看去学,和你潜意识里知道有很多人在跟你一起学,效果是完全不一样的。



第二个,热点问题答疑,这也是宝令老师专栏的特色了。


每一模块的最后都会专门有一篇文章去详细回答各类问题,看这类问题的同时我自己脑子里存储的各类知识也都会融会贯通起来,不知不觉中勾勒出自己的知识全景图,很有成就感。


专栏下面的留言,老师都会耐心去解答,看回复也能收获很多。后续也希望老师能继续输出一些自己的所得和见解,而我们,则站在巨人的肩膀上,遇见我们最美好的风景!


在最后,我也附上我自己学习过程中的一些代码积累



今天小编也给大家申请到了《Java并发编程》的限时优惠福利:优惠价 79,原价 99,只有 24 小时。此专栏已有 1.1w 程序员订阅,评价都很高。


截点大家的评论给你。



想要系统学习 Java 并发的同学,赶紧搭上这辆完结福利车。


2019-06-24 18:467212

评论 1 条评论

发布
用户头像
这广告做的真恶心
2019-07-02 09:00
回复
没有更多了
发现更多内容

Sketchpad几何画板 for Mac v5.06完美激活版

mac

苹果mac Windows软件 Sketchpad 几何画板 几何教学工具

NineData:帮助开发者用好数据和云

NineData

软件 开发 备份 NineData 数据库工具

一起学Elasticsearch系列-分词器

Java随想录

Java 大数据 Elast Elastic Search

MySQL运行在docker容器中会损失多少性能

EquatorCoco

MySQL 数据库 Docker 容器化

Wireshark的数据包

小齐写代码

Windows10 下 CUDA 新旧多版本共存

北桥苏

Python tensorflow nlp cuda

LED屏幕行业当前形势及未来

Dylan

数字化 行业 LED LED显示屏

预训练大模型的演变与突破

百度开发者中心

大模型 #人工智能 ChatGPT

时间复杂度为 O(nlogn) 的排序算法 | 京东物流技术团队

京东科技开发者

算法 时间复杂度 排序算法 企业号11月PK榜 O(nlogn)

DAPP钱包燃烧质押合约挖矿项目系统开发

l8l259l3365

当OLAP碰撞Serverless,看ByteHouse如何建设下一代云计算架构

字节跳动数据平台

数据库 大数据 云原生

高防服务器的原理

Geek_f19a80

服务器

PP-OCR与文心一言强强结合,无须训练,信息抽取精度超80%!

飞桨PaddlePaddle

人工智能 OCR 文心一言

企业级应用场景中,LLM 的数据特性剖析及处理对策

Baihai IDP

人工智能 程序员 AI LLM 白海科技

带你了解大语言模型的前世今生

华为云开发者联盟

人工智能 AI 华为云 华为云开发者联盟 LLM

飞码LowCode前端技术之画布的设计 | 京东云技术团队

京东科技开发者

前端 低代码 企业号11月PK榜 画布设计

使用阿里巴巴API获取商品详情的实践指南

Noah

生成式语言大模型的工程实践

百度开发者中心

自然语言处理 大模型 生成式AI

LLM大模型AI能力助力企业数字化智能化转型

百度开发者中心

大模型 #人工智能

IPQ8072 router and QCN9074 card combine to provide ultra-fast-stable-broad WiFi 6E network

wifi6-yiyi

QCN9074 IPQ8072

Jayway JsonPath-提取JSON文档内容的Java DSL | 京东物流技术团队

京东科技开发者

json JsonPath 企业号11月PK榜

Swish for Mac(MacBook触控板窗口管理) v1.10.3永久激活版

mac

苹果mac Windows软件 触控板窗口管理工具 Swish

阿里巴巴商品详情 API 的深度解析与应用

Noah

📝iOS移动应用程序的备案与SHA-1值查看

雪奈椰子

📝 App备案与iOS云管理式证书  ,公钥及证书SHA-1指纹的获取方法

从事 Java 开发 5 年,才意识到“学好并发”的重要性 | 极客时间_语言 & 开发_Zed_InfoQ精选文章