代码精进之路
范学雷
前 Oracle 首席软件工程师,Java SE 安全组成员,OpenJDK 评审成员
37886 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
结束语 (1讲)
代码精进之路
15
15
1.0x
00:00/00:00
登录|注册

22丨高效率,从超越线程同步开始!

线程的同步是学习一门编程语言的难点。刚开始线程同步的困难,主要在于了解技术;跨过了基本技术的门槛后,更难的是掌握最基本的概念。
学习技术时,我们对基本概念熟视无睹,只想将宝剑尽快握在手,哪管宝剑何时该挥出的教导。学会技术后,基本概念就会回来找我们算旧账,出错一次剑,就记一笔账。账本慢慢变厚的过程,也是我们向基本概念靠拢的过程。当我们掌握了最基本的概念后,开始慢慢还账,账本再越变越薄。
不单单是线程和同步,掌握好基本概念,几乎是我们学习所有技术背后的困境。这怨不得我们自己,我们认识一件事情的过程,大抵就是这样。
如果有人很早地就敲着桌子,不厌其烦地重复着基本的概念,事情会不会容易一些?这一次,我们聊聊线程同步的基本概念,以及如何超越线程同步。

什么时候需要同步?

线程有两个重要的特征,就是并发执行和共享进程资源。
你可以把进程想象成一个鱼缸。鱼缸里的金鱼可以看作线程。鱼缸里的碎石、水草、鱼食等可以看作共享的资源。每一条鱼都独立行动,随时可以吐个气泡,吃点鱼食,耍弄下水草。
鱼缸里的碎石、水草,小鱼儿搬不走、吃不掉,是一个不变的量。鱼食和气泡就不一样了,每一条小鱼儿随时都会吐泡泡、吃鱼食,改变气泡和鱼食的数量。鱼食和气泡,是鱼缸里的可变量。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《代码精进之路》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • Sisyphus235
    先将启动 signature 的部分拆分出来生成一个类,完成 verification 和 signing 的初始化。更新的方法放在一个类中扩展 signature,这样所有修改的值都是一个对象的属性值,这样会不会多线程安全?

    作者回复: 有一个思路,就是把update()的逻辑内部化,比如使用Stream而不是byte[]。没有了update()方法,这个类重构起来就方便多了。

    3
  • 克里斯
    刚工作一年的程序员小嫩鱼,一直很想成为一种人:思维清晰,思路快。 团队也有一些思路严谨的同事,然而问他如何思考问题的,他也只是说多思考多想;问一些代码写的好的同事,他们也说不出所以然。所以决定开始了自己的求索之路。 带我入门的是极客时间 刘超《趣谈网络协议》,最大的收获就是感觉理解技术代表的“需求(或者说是what+why)”才是理解技术的核心所在。 一直感觉自己代码写的不好,看了一些技术书,基本上也是介绍一些知识性的细节,基本也是技术的语法和常见的注意事项。实践了一段时间,感觉自己没有什么提升,无论是阅读代码还是写代码。 就开始找代码重构之类的书,很庆幸自己读了《head first 设计模式》。这本书基本上是我觉得写的最浅显也是最深刻的书籍了,我认为是扫地僧级别的。但是很多觉得知识才是王道的人,发现不了这本书的能量之大。也是在这本书我了解到了思考需求应该如何落地,以及应该考虑哪些未知变化,也就是(how+if)。 后来追本溯源,发现了逻辑学教材《金字塔原理》,系统的了解了思维的结构,但是实践却需要我一辈子去努力。 读到范前辈的文章时,我更加确定了一个优秀的学者是什么思维,感谢你们的课程,让我更加确信这是一条无论怎么努力都不为过的道路。
    14
  • 唐名之
    学习总结: 1:多线程具备并行和共享资源特性,多核cpu并行可加快执行速度但需谨慎共享资源带来的隐患; 2:多线程中使用单例对象,工具类都需注意多线程安全问题; 3:优化同步,加锁粒度尽量控制更细,尽量减少阻塞时间;
    10
  • ifelse
    我们要养成一个习惯,看到声明的变量,就要琢磨,这个变量能不能声明成不可变的量?--记下来
  • aoe
    🐟吐泡泡的例子非常生动形象,可以当故事给小朋友讲
  • kelvin
    这个线程安全怎么定义呢?是要一个线程改变内容不影响另外一个线程的数据,还是只是不能同步修改数据。如果是第一种可以把数据拆分成一个类,每次把数据传递进入。第二种只要在临界代码加锁就可以。
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部