写点什么

从事 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:467157

评论 1 条评论

发布
用户头像
这广告做的真恶心
2019-07-02 09:00
回复
没有更多了
  • 这本书押中了 2022 北京高考作文题!

    今天中午收到一位读者反馈,《学习的学问》命中了2022年的高考作文。而这位读者,正好在考前读了《学习的学问》。

    2022-06-08

  • 和老大的相爱相杀中, 让我终于搞懂了函数式接口

    Hi,大家好,我是麦洛。我又回来啦🙈

    2021-04-10

  • 热点面试题:聊聊对 this 的理解?

    欢迎关注 『前端进阶圈』 公众号 ,一起探索学习前端技术......

    2023-02-28

  • 说说 Golang goroutine 并发那些事儿

    摘要:今天我们一起盘点一下Golang并发那些事儿。

    2021-02-09

  • 不服不行,黑马 java 教学多线程 pdf,腾讯 T3 大牛总结

    在写这个文章之前,我花了点时间,自己臆想了一个电商系统,基本上算是麻雀虽小五脏俱全,我今天就用它开刀,一步步剖析,我会讲一下我们可能会接触的技术栈可能不全,但是够用,最后给个学习路线。

    2021-10-26

  • 快速掌握并发编程 --- 深入学习 ThreadLocal

    考试题只有一套,老师把考试题打印出多份,发给每位考生,然后考生各自写各自的试卷。考生之间不能相互交头接耳(会当做作弊)。各自写出来地答案不会影响他人的分数。

    2020-11-02

  • 一个茶艺师转型程序员的小故事

    一个茶艺师转型程序员的小故事

  • 给弟弟的信第 16 封|人为什么会抑郁

    最近被一条新闻刷屏,腾讯游戏开发大神毛星云跳楼身亡,据传他生前抑郁,曾住院。他当时的心理活动和具体情况我们不得而知,只能愿生者安好,愿逝者安息。近些年来,抑郁这个词出现的频率好像越来越高,原苏宁科技集团副总裁乔新亮在他的极客时间专栏中也写到

    2021-12-18

  • 对比 volatile vs synchornized

    你好,我是悟空呀。今天我们学习下 volatile 和 synchornized。

    2021-12-05

  • 83|关系型数据库:怎样使用关系型数据库?

    2023-01-11

  • 10 分钟带你彻底搞懂 DDD 开发框架 Axon

    讲师介绍: 萧亦然,资深技术专家、TGO 鲲鹏会会员、阿里云 MVP、腾讯云 TVP。 问题背景: 当下,随着微服务架构的不断发展,领域驱动设计(DDD)也得到了越来越多的应用。但业界并没有针对如何实现 DDD 中聚合、领域事件等复杂概念提供统一的开发规范。在这个背景下,开发人员迫切希望能够引入即插即用的开源框架,来简化 DDD 应用程序的开发过程,Axon就是这样一款开发框架。 内容看点: Axon 的技术组件 Axon 的应用方式

    2022-03-15

  • 与前端训练营的日子 --Week06

    又过了一周,这周的学习强度蛮大的,有11节课,虽然要理解完还需要时间,但也懵懵懂懂地完成了学习任务🤣。

    2020-12-07

  • 【死磕 Java 并发】----- 深入分析 synchronized 的实现原理

    记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着我们学习的进行我们知道synchronize

    2021-11-04

  • 为什么学 Go(一)

    "为什么学Go"是一系列文章,这里并不介绍如何学习Go,很多同学最近在问我要不要学Go。这是一个很大的问题,就是我为什么学Go?Go究竟是什么东西?带着这些疑问,我们先去了解Go和它背后的故事。

    2020-10-14

  • 11. Java 客户端 -Jedis

    2023-02-15

  • 【薪火计划】11 - 学习总结

    历时三个月的学习,给我的感觉就是,对管理有了更为清晰的认知,以前自己是摸石头过河,有些东西似是而非,很难判断什么样的方式,或者说什么样的思路是正确的,但是经过这段时间的学习,自己好像在迷雾中突然看见了明灯,可以看见前方的路况。如果说这段时间

    2021-01-11

  • 用户故事|罗杰:我的 Go 语言学习之路

    今天,我们邀请了一位用户和你分享一下他学习Go的一些经历,如果你还是一个Go新人,希望他的这些经历,能给你带来一些启发和帮助。

    2021-12-27

  • 10 分钟带你彻底搞懂迭代器设计模式

    2022-07-08

  • 10 天拿到阿里 Java 岗 offer,准备 Java 面试

    在写这个文章之前,我花了点时间,自己臆想了一个电商系统,基本上算是麻雀虽小五脏俱全,我今天就用它开刀,一步步剖析,我会讲一下我们可能会接触的技术栈可能不全,但是够用,最后给个学习路线。

    2021-09-23

  • 10 分钟带你彻底搞懂 MyBatis-Spring 启动过程工作原理

    对于目前主流的开源框架而言,研究它们的启动过程非常有助于我们把握框架的实现原理。而对于那些专门用来实现不同框架之间整合的技术组件而言,通常都会应用到框架的一些核心功能特性,值得我们深入分析。这节课,我将和你一起探讨 MyBatis-Spring 组件的启动过程,在这个启动过程中,完成了 MyBatis 与 Spring 这两个框架之间的无缝集成。 讲师介绍 萧亦然,资深技术专家、TGO 鲲鹏会会员、阿里云 MVP、腾讯云 TVP。 内容看点 MyBatis 和 Spring 的集成过程 SqlSession 和 Mapper 获取过程和原理 SqlSessionTemplate 线程安全性分析

    2022-10-14

发现更多内容

探索专有领域的端到端ASR解决之道

华为云开发者联盟

端到端 ASR 自动语音识别 语境偏移 专有领域

iOS 面试策略之经验之谈-架构的选择

iOSer

ios 架构

iOS 面试策略之经验之谈- App的测试和上架

iOSer

ios 面试 app上架 app测试

不同数据库模式下DATE类型的行为解析

华为云开发者联盟

MySQL oracle GaussDB(DWS) TD DATE类型

字节、美团等客户与华为联合创新DCI智能控制器,共筑互联网基础设施新生态

☕【JVM 技术之旅】深入JVM原理分析synchronized

洛神灬殇

synchronized 重量级锁 5月日更 同步锁 ObjectMontior

全新F1洞察精彩亮相,帮你理解赛道上的瞬间决定!

亚马逊云科技 (Amazon Web Services)

GitHub开源的10个超棒后台管理面板

不脱发的程序猿

GitHub 开源 后台管理面板

NUCLEO-L432KC实现ADC配置(STM32L432KC)

不脱发的程序猿

嵌入式 单片机 NUCLEO-L432KC STM32L432KC 光敏电阻传感器

Django 之路由篇

若尘

django Python编程 路由 5月日更

iOS面试大全从面试的准备和流程到算法和数据结构以及计算机基础知识

iOSer

ios 面试 面向协议protocol编程 iOS 知识体系

一文通关苦涩难懂的Java泛型

程序猿阿星

泛型 java基础 Java泛型

农产品区块链溯源平台建设解决方案,健全食品安全体系

源中瑞-龙先生

区块链 溯源 食品安全

打造生态“朋友圈”,英特尔以生态之道培育AI创新“大气候”

E科讯

再不解决延迟不当,小心你的内存被打爆

华为云开发者联盟

线程 延迟 内存 并发 Sleep

屏幕共享的实现与应用

anyRTC开发者

音视频 WebRTC RTC sdk

详解RS232、RS485、RS422、串口和握手

不脱发的程序猿

串口 通信总线 RS232、RS485、RS422 握手通信

iOS 面试策略之经验之谈-面向协议的编程

iOSer

ios swift 面试 面向协议protocol编程 面向协议编程

阿里P9架构师力荐:Java面试必刷的17套一线大厂真题(含答案)

Java架构追梦

Java 阿里巴巴 架构 腾讯 面试

手把手带你体验 Amazon Graviton2 的高性价比!文末有惊喜

亚马逊云科技 (Amazon Web Services)

☕【JVM 技术之旅】攻克技术盲点之“JVM常量池们“

洛神灬殇

JVM 5月日更 字符串常量池 静态常量池 运行时常量池

强化基于位置的4种营销策略

郑州埃文科技

IP 营销 ISP

5G掀起工业互联网浪潮,水泥厂智能管理模式收效颇丰

一只数据鲸鱼

数据可视化 工业互联网 智慧工厂 水泥厂 智能工厂

将模型转为NNIE框架支持的wk模型第一步:tensorflow->caffe

华为云开发者联盟

tensorflow caffe NNIE框架 wk模型 mxnet

强劲性能释放释放:联想消费新品笔记本震撼发布

E科讯

详解 WebRTC 高音质低延时的背后 — AGC(自动增益控制)

阿里云视频云

阿里云 WebRTC 3A算法 音频技术 视频云

Cilium 1.10 重磅发布!】支持 Wireguard, BGP, Egress IP 网关, XDP 负载均衡, 阿里云集成

公众号:云原生Serverless

云原生 cilium cni

“零信任产业标准工作组”再度升级,持续促进国内零信任产业的协同发展

提高建模效率:自动化机器学习之贝叶斯优化综述

索信达控股

机器学习 自动化 金融科技 贝叶斯公式 产品建模

助力秋招第二弹:Java并发编程知识梳理

北游学Java

Java 面试 秋招

驾云驭能,云科技点燃制造创新之旅!

亚马逊云科技 (Amazon Web Services)

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