# juc **Repository Path**: unidentifiable/juc ## Basic Information - **Project Name**: juc - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-09-09 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 章节小结 ## 第一章 ## 第二章 - 单核CPU下, 多线程不能实际提高程序运行效率, 只是为了能够在不同的任务之间切换, 不同线程轮流使用CPU, 不至于一个线程总占用CPU, 别的线程没法干活 - 多核CPU可以并行跑多个线程, 但能否提高程序运行效率还是要分情况的 - 有些任务, 经过精心设计, 讲任务拆分, 当然可以提高程序的运行效率. 但不是所有计算任务都能拆分(参考后文的[阿姆达尔定律]) - 也不是所有任务都需要拆分, 任务的目的如果不同, 谈拆分和效率没啥意义 - IO操作不占用CPU, 只是我们一般拷贝文件使用的是[阻塞IO], 这时相当于线程虽然不用CPU, 但需要一直等待IO结束, 没能充分利用线程. 所以才有后面的[非阻塞IO]和[异步IO]优化 ## 第三章 - 线程创建 - 线程重要 api, 如: start, run, sleep, join, interrupt等 - 线程状态 - 应用方面 - 异步调用: 主线程执行期间, 其他线程异步执行耗时操作 - 提高效率: 并行计算, 缩短运算时间 - 同步等待: join - 统筹规划: 合理使用线程, 得到最优效果 - 原理方面 - 线程运行流程: 栈, 栈帧, 上下文切换, 程序计数器 - Thread两种创建方式的源码 - 模式方面 - 两阶段终止 ## 第四章 - 分析多线程访问共享资源时, 哪些代码片段属于临界区 - 使用synchronized互斥解决临界区的线程安全问题 - 掌握synchronized锁对象语法 - 掌握synchronized加载成员方法和静态方法语法 - 掌握wait/notify同步方法 - 使用lock互斥解决临界区的线程安全问题 - 掌握lock的使用细节: 可打断, 锁超时, 公平锁, 条件变量 - 学会分析变量的线程安全性, 掌握常见线程安全类的使用 - 了解线程活跃性问题: 死锁, 活锁, 节 - 应用方面 - 互斥: 使用synchronized或Lock达到共享资源互斥效果 - 同步: 使用wait/notify或Lock的条件变量来达到线程间通讯效果 - 原理方面 - monitor, synchronized, wait/notify原理 - synchronized进阶原理 - park & unpark 原理 - 模式方面 - 同步模式之保护性暂停 - 异步模式之生产者消费者 - 同步模式之顺序控制 ## 第五章 - 可见性(由JVM缓存优化引起) - 有序性(由JVM指令重排序优化引起) - happens-before规则 - 原理方面 - CPU指令并行 - volatile - 模式方面 - 两阶段终止模式的volatile改进 - 同步模式之balking ## 第六章 - CAS 与 volatile - API - 原子整数 - 原子引用 - 原子数组 - 字段更新器 - 原子累加器 - Unsafe - 原理方面 - LongAdder 源码 - 伪共享 ## 第七章 - 不可变类使用 - 不可变类设计 - 原理方面 - final - 模式方面 - 享元