教小师妹学多线程,看完我写的例子,脸红成那样!

教小师妹学多线程,看完我写的例子,脸红成那样!

刚知道咋打开 IDEA,费劲扒拉的写个 HelloWorld,就要上手搞多线程绝对是史诗级理解难度。、、、,纳尼/p>

以我的学习经历来说,一个知识点是否能快速接受并学习到,往往是看有没有一个合适的场景和好的例子,来引导读者学习到这样的技术,就像;

  • Git:上厕所不叫上厕所,叫拉分支!
  • Socket:厕所就是服务器,坑就是端口!
  • 队列:上厕所??叫入队列,先进先出!
  • :去厨房??叫进栈,后进先出!
  • 架构:三居的格局叫MVC,四居的格局叫DDD!
  • 理论:系统结构设计定的好,有点bug没问题,能改。这就是茅坑跟坐便的区别。

除了有点味道以外,这回是不记住了,我们编程写代码的过程和我们日常生活的例子,往往都是这样可以对应上,有了真实可以触及的实物,再去了解编程就会更加容易,也很难忘记。

二、给小师妹一个脸红的多线程

一个最开始接触多线程知识的未来500强工程师,也可能需要翻很多次书、写很多例子、敲很多代码,才能大概理解个7788,不是这知识有多难,主要是例子不好,不进脑子。

那么,接下来我们模拟鹿鼎记·丽春院,清倌喝茶吟诗聊风月日常。当有达官贵人来时,需要分配清倌给大老爷。中间会有一些等待、叫醒操作。只为让你更好的记住这样的案例,不要想歪喽。清倌人即是只卖艺欢场人,喊麦的。

1. wait & notify 等待和叫醒

案例代码

测试结果

  • ,说看完例子就懂了!
  • 首先这样的例子它贴近于电视剧、影视作品中经常出现的场景。把生活与技术结合后,你会发现原本不好理解的技术点就好理解了!
  • wait 和 notify/nofityall,是一对方法,有一个等待,就会有一个叫醒,否则程序就夯在那不动了。关于这部分会使用到的 在之前小傅哥有深入的源码分析,讲到它是怎么加锁在对象头的,如果你忘记了可以翻翻看 《synchronized 解毒,剖析源码深度分析!》
  • 了解了基础的例子,接下来在深入学习线程中的各项技术点,就比较容易在头脑中带着场景去验证和学习了。

2. yield

yield 方法让出CPU,但不一定,一定让出!。这种可能会用在一些同时启动的线程中,按照优先级保证重要线程的执行,也可以是其他一些特殊的业务场景(例如这个线程内容很耗时,又不那么重要,可以放在后面)。

为了验证这个方法,我们做一个例子:启动50个线程进行,每个线程都进行1000次的加和计算。其中10个线程会执行让出CPU操作。那么,如果让出CPU那10个线程的计算加和时间都比较长,说明确实在进行让出操作。

案例代码

private static volatile Map count = new ConcurrentHashMap();static class Y implements Runnable {    private String name;    private boolean isYield;    public Y(String name, boolean isYield) {this.name = name;this.isYield = isYield;    }    @Override    public void run() {long l = System.currentTimeMillis();for (int i = 0; i 来源:小傅哥
                                                        

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年2月21日
下一篇 2021年2月21日

相关推荐