22丨高效率,从超越线程同步开始!
范学雷
该思维导图由 AI 生成,仅供参考
线程的同步是学习一门编程语言的难点。刚开始线程同步的困难,主要在于了解技术;跨过了基本技术的门槛后,更难的是掌握最基本的概念。
学习技术时,我们对基本概念熟视无睹,只想将宝剑尽快握在手,哪管宝剑何时该挥出的教导。学会技术后,基本概念就会回来找我们算旧账,出错一次剑,就记一笔账。账本慢慢变厚的过程,也是我们向基本概念靠拢的过程。当我们掌握了最基本的概念后,开始慢慢还账,账本再越变越薄。
不单单是线程和同步,掌握好基本概念,几乎是我们学习所有技术背后的困境。这怨不得我们自己,我们认识一件事情的过程,大抵就是这样。
如果有人很早地就敲着桌子,不厌其烦地重复着基本的概念,事情会不会容易一些?这一次,我们聊聊线程同步的基本概念,以及如何超越线程同步。
什么时候需要同步?
线程有两个重要的特征,就是并发执行和共享进程资源。
你可以把进程想象成一个鱼缸。鱼缸里的金鱼可以看作线程。鱼缸里的碎石、水草、鱼食等可以看作共享的资源。每一条鱼都独立行动,随时可以吐个气泡,吃点鱼食,耍弄下水草。
鱼缸里的碎石、水草,小鱼儿搬不走、吃不掉,是一个不变的量。鱼食和气泡就不一样了,每一条小鱼儿随时都会吐泡泡、吃鱼食,改变气泡和鱼食的数量。鱼食和气泡,是鱼缸里的可变量。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文以生动的比喻和具体的代码示例,深入浅出地介绍了线程同步的基本概念和超越线程同步的方法。通过讨论线程同步的基本概念以及超越线程同步的技巧,强调了线程同步对效率的损害,并提出了不使用线程同步的最高技巧。文章还介绍了如何使用final关键字创建不可变类,以及在设计接口或实现代码时如何减少同步阻塞时间。此外,文章还提到了一个具体的Java核心类Signature,探讨了如何实现一个天然的多线程安全的子类,以及重新设计这个类的可能方案。总之,本文通过具体案例和技术讨论,为读者提供了深入了解线程同步及其超越方法的机会。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《代码精进之路》,新⼈⾸单¥59
《代码精进之路》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- Sisyphus235先将启动 signature 的部分拆分出来生成一个类,完成 verification 和 signing 的初始化。更新的方法放在一个类中扩展 signature,这样所有修改的值都是一个对象的属性值,这样会不会多线程安全?
作者回复: 有一个思路,就是把update()的逻辑内部化,比如使用Stream而不是byte[]。没有了update()方法,这个类重构起来就方便多了。
2019-05-233 - 克里斯刚工作一年的程序员小嫩鱼,一直很想成为一种人:思维清晰,思路快。 团队也有一些思路严谨的同事,然而问他如何思考问题的,他也只是说多思考多想;问一些代码写的好的同事,他们也说不出所以然。所以决定开始了自己的求索之路。 带我入门的是极客时间 刘超《趣谈网络协议》,最大的收获就是感觉理解技术代表的“需求(或者说是what+why)”才是理解技术的核心所在。 一直感觉自己代码写的不好,看了一些技术书,基本上也是介绍一些知识性的细节,基本也是技术的语法和常见的注意事项。实践了一段时间,感觉自己没有什么提升,无论是阅读代码还是写代码。 就开始找代码重构之类的书,很庆幸自己读了《head first 设计模式》。这本书基本上是我觉得写的最浅显也是最深刻的书籍了,我认为是扫地僧级别的。但是很多觉得知识才是王道的人,发现不了这本书的能量之大。也是在这本书我了解到了思考需求应该如何落地,以及应该考虑哪些未知变化,也就是(how+if)。 后来追本溯源,发现了逻辑学教材《金字塔原理》,系统的了解了思维的结构,但是实践却需要我一辈子去努力。 读到范前辈的文章时,我更加确定了一个优秀的学者是什么思维,感谢你们的课程,让我更加确信这是一条无论怎么努力都不为过的道路。2019-05-0415
- 唐名之学习总结: 1:多线程具备并行和共享资源特性,多核cpu并行可加快执行速度但需谨慎共享资源带来的隐患; 2:多线程中使用单例对象,工具类都需注意多线程安全问题; 3:优化同步,加锁粒度尽量控制更细,尽量减少阻塞时间;2019-02-2210
- ifelse我们要养成一个习惯,看到声明的变量,就要琢磨,这个变量能不能声明成不可变的量?--记下来2022-07-24
- aoe🐟吐泡泡的例子非常生动形象,可以当故事给小朋友讲2021-12-17
- kelvin这个线程安全怎么定义呢?是要一个线程改变内容不影响另外一个线程的数据,还是只是不能同步修改数据。如果是第一种可以把数据拆分成一个类,每次把数据传递进入。第二种只要在临界代码加锁就可以。2019-06-15
收起评论