线程八大核心+Java并发原理及企业级并发解决方案 Study Notes
Kierke

慕课网实战课程《线程八大核心+Java并发原理及企业级并发解决方案》学习笔记

Reference




第1章 开宗明义

为什么需要学习并发编程

  • 源于JD的硬性要求,尤其是大厂
  • 网络上的博客、面经水平参差不齐,难辨真伪
  • 掌握并发编程是成为高级工程师的必要、
  • 并发是众多框架的原理和基础(Spring中的线程池,数据库中的乐观锁,Log4j对阻塞队列的运用)



第2章 线程八大核心纵观全貌

脑图



线程八大核心概述

  • (1)如何实现多线程【基础】
    • 实现多线程的方法到底有1种还是2种还是4种 ?
  • (2)线程的正确启动【基础】
  • (3)线程的正确停止【重点/难点】
  • (4)线程的6个状态(生命周期)【重点/难点】
  • (5)Thread和Object类中的重要方法详解
  • (6)线程的各个属性
    • 线程的名称、守护线程等
  • (7)未捕获异常如何处理
    • Java并发多线程中的异常跟普通的Java异常有很大不同
  • (8)并发中多线程的优劣
    • 双刃剑:多线程会导致的问题



第3章 核心1:实现多线程的正确姿势【解读官方文档】

实现多线程的2种方式

  • 官网:Oracle的JDK中描述一共有2种实现多线程的方法
    • 方法1:实现Runnable接口
    • 方法2:继承Thread类
  • 方法1 VS 方法2
    • 方法1更好,方法2的缺点主要有3个:
      • 代码架构角度:任务应该和业务解耦
      • 新建线程损耗:方法2每次新建任务,都需要新建一个线程,新建独立线程开销大
      • Java不支持双继承,方法1扩展性更好
    • 两种方法的本质(都执行run方法,但run方法来源不同)
      • 方法1:target.run()
      • 方法2:run()方法整个被重写


思考题:如果同时使用两种实现的多线程方式?具体会执行哪个?

  • 从面相对象的方式来思考,最终会执行继承Thread类方式实现多线程中的代码,因为run方法被重写了


创建线程总结

  • 准确的讲,创建线程只有一种方式那就是构造Thread类,而实现线程的执行单元有两种方式
    • 方法1:实现Runnable接囗的run方法,并把Runnable实例传给Thread类
    • 方法2:重写Thread的run方法(继承Thread类)


*学习编程知识的优质路径

宏观上

  • 并不能靠工作年限(有的人工作了5年技术却还是只懂皮毛)
  • 要有强大的责任心,不放过任何bug,找到原因并去解决,这就是提高
  • 主动:永远不会觉得自己的时间多余,重构、优化、学习、总结
  • 敢于承担:虽然这个技术难题以前没碰到过,但是在一定的了解调研后,敢于承担技术难题,让工作充满挑战,这一次次攻克难关的过程中,进步是飞速的。
  • 关心产品,关心业务,而不只是写代码

微观上(目的:系统全面的学习)

  • 看经典书籍(外国人写的经典的中国译本,比如说Java并发编程实战、自顶向下计算机网络)
  • 看官方文档
  • 英文搜google和stackoverflow
  • 自己动手写,实践写demo,尝试用到项目里
  • 不理解的参考该领域的多个书本,综合判断
  • 学习开源项目,分析源码(学习synchronized原理,反编译 看cpp代码)


如何了解技术领域的最新动态

  • 高质量固定途径:ohmyrss.com(信息源选,为我所用)
    • 科技爱好者周刊
    • 阮一峰的博客
    • 四火的唠叨
  • 订阅技术网址的邮件:InfoQ(每周都看)
  • 公众号不推荐作为技术知识来源,质量无法保证


如何在业务开发中成长

  • 偏业务:
    • 整理业务知识,把业务抽象成核心模型,提炼核心技术;
    • 考虑的长远一些,如果未来流量有了巨大的增加,应该如何应对,如何设计系统架构
  • 偏技术:通用性强
  • 两个25%理论:在技术上达到前25%,在自己擅长的领域达到25%,两者结合起来就能到前5%


实现多线程&常见面试问题




第4章 核心2:开启多线程启动的世界

start()

  • 在主线程中调用了线程的start()方法后:
    • (1)启动新线程检查线程状态
    • (2)加入线程组
    • (3)调用native start0()
  • start()方法含义
    • 启动新线程
    • 准备工作
    • 不能重复调用start0()



第5章 核心3:线程停止、中断之最佳实践

Reference




Remark

  1. xxx需要再深入学习
1
2
3
4
5
<font color=red></font>
![]()
<img src="" title="图片名称" alt="图片无法正常加载展示!" width="100%" height="100%" >
<img src="" width="70%">
****