写在前面
并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。现在几乎100%的公司不但面试都必须问到并发编程,而且在日常工作和开发当中更是需要并发编程的使用,尤其是在互联网公司,它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。
计算机领域从来都不乏变革,每一次都带来新的机遇与挑战。“并发编程” 无疑是一场令人激动的变革。迎接技术变革与挑战,是软件开发者的空气和水。很高兴你已经读到了这里,那么请不要停下来,继续享受挑战的乐趣,继续面对这场变革,前进吧!
进程与线程
进程
线程
并行与并发
(由于内容太多了,为了不影响大家的阅读体验,以下大量内容省略......Σ( ° △ °|||)︴)
共享模型之管程
共享带来的问题
共享模型之内存
退不出的循环
共享模型之无锁
CAS与volatile
CAS的特点
共享模型之不可变
日期转换的问题
共享模型之工具
线程池
ThreadPoolExecutor
Executor线程配置
线程安全集合类概述
指令级并行原理
SuperScalar处理器
CPU缓存结构原理
.CPU缓存结构
CPU缓存一致性
MESI协议
volatile原理
volatile的底层实现原理是内存屏障,Memory Barrier ( Memory Fence )
如何保证可见性
final原理
Monitor原理
Monitor被翻译为监视器或管程
每个Java对象都可以关联一个Monitor对象,如果使用synchronized给对象上锁(重量级)之后,该对象头的Mark Word中就被设置指向Monitor对象的指针
synchronized原理进阶
轻量级锁
自旋优化
重量级锁竞争的时候,还可以使用自旋来进行优化,如果当前线程自旋成功(即这时候持锁线程已经退出了同步块,释放了锁), 这时当前线程就可以避免阻塞。
偏向锁
wait notify原理
park unpark原理
每个线程都有自己的一一个Parker对象
如果备用干粮耗尽,那么钻进帐篷歇息. 如果备用干粮充足,那么不需停留,继续前进
如果这时线程还在帐篷,就唤醒让他继续前进 如果这时线程还在运行,那么下次他调用park时,仅是消耗掉备用干粮,不需停留继续前进
ReentrantLock原理
条件变量实现原理
每个条件变量其实就对应着一个等待队列 ,其实现类是ConditionObject
读写锁原理
(以上省略大量图文内容.......,Σ( ° △ °|||)︴)
Semaphore原理
Semaphore有点像一个停车场, permits就好像停车位数量,当线程获得了permits就像是获得了停车位,然后停车场显示空余车位减一
为什么要有PROPAGATE
LinkedBlockingQueue原理
同步模式之保护性暂停
即Guarded Suspension,用在一个线程等待另一个线程的执行结果
要点
同步模式之顺序控制
固定运行顺序
交替输出
异步模式之生产者/消费者
定义
异步模式之工作线程
创建多少线程池合适
自定义线程池
终止模式之两阶段终止模式
两阶段终止模式
线程安全单例
享元模式
借用Java并发编程实践中的话”编写正确的程序并不容易,而编写正常的并发程序就更难了”,相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作的顺序是不可预期的,下面算是对多线程情况下同步策略的一个简单介绍。
这份【并发编程】【并发编程之模式篇】【并发编程之原理篇】【并发编程之应用篇】文档共有390页,需要完整版的朋友,可以转发此文关注公众号
当然,单单有文档看是远远不够的,还有视频和相匹配的课件进行学习提升,努力把并发编程这一块儿给搞明白,相信一定会有不凡的人生!!