并发编程专题
该专题涉及并发理论基础、常用的并发工具类、并发设计模式、实战案例分析等
爱读书的张先生
世界上任何书籍都不能给你带来好运,但是它们能让你悄悄成为你自己。
展开
-
并发理论基础-互斥锁:原子性
并发理论基础-互斥锁:原子性01 | 导读1、原子性1)定义:一个或者多个操作在 CPU 执行的过程中不被中断的特性,称为“原子性”2)容易误解:原子性问题的源头是线程切换,操作系统做线程切换是依赖 CPU 中断的,所以禁止 CPU 发生中断就能够禁止线程切换单独的1和2都没问题,如果认为禁用CPU 中断就能解决原子性问题,这就有待商酌了。3)1个例子:32 位 CPU 上执行 long 型变量的写操,long 型变量是 64 位,在 32 位 CPU 上执行写操作会被拆分成两次写原创 2020-07-27 21:35:54 · 297 阅读 · 0 评论 -
Java内存模型:解决可见性和有序性问题
Java内存模型:解决可见性和有序性问题01 | Java 内存模型1、导读1)可见性、原子性、有序性是并发编程的 Bug 之源2) Java 内存模型是面试热点,同时也是分析并发问题的基础3)Java 内存模型是个很复杂的规范,可以从不同的视角来解读2、Java 内存模型作用1)解决可见性2)解决有序性3、简析出现Java 内存模型的原因1)缓存和编译优化分别导致可见性和有序性问题,一刀切禁用虽然可以解决问题,但严重影响性能,合理的方案是按需禁用缓存以及编译优化。2)为了解原创 2020-07-19 09:49:17 · 227 阅读 · 0 评论 -
并发理论基础-并发编程的Bug源头:可见性、原子性、有序性
并发编程学习策略01 | 并发Bug简析1、导读1)CPU、内存、I/O 设备的核心矛盾:三者的速度差异。2) 两个形象的比喻a、形象的比喻:若CPU 是天上一天,内存则是地上一年;假设 CPU 执行一条普通指令需要一天,那么 CPU 读写内存得等待一年的时间。b、形象的比喻:若内存是天上一天,I/O 设备则是地上十年。3)为了合理利用 CPU 的高性能,平衡这三者的速度差异,CPU增加了缓存,操作系统引入了进程、线程,编程程序优化了指令执行次序。这些操作是引起并发bug的源头。2、并发原创 2020-07-09 21:02:25 · 215 阅读 · 0 评论 -
并发编程学习策略
并发编程学习策略01 | 学好并发两步曲1)跳出来,看全景2)钻进去,看本质02 | 跳出来,看全景1、导读1)从单一的知识和技术中“跳出来”,从全局看并发编程。2)建立一张全景图,将并发编程抽象成三个核心问题:分工、同步、互斥。2、分工1)定义:所谓分工,类似于现实中一个组织完成一个项目,项目经理要拆分任务,安排合适的成员去完成。2)并发领域里,分工很重要,它直接决定了并发程序的性能。3)学习分工:最佳的方式就是和现实世界做对比。例如生产者和消费者,可以分别类比大厨和服务原创 2020-07-08 23:02:46 · 160 阅读 · 0 评论 -
并发编程全景图
并发编程全景图01 | 分工1)Executor与线程池2)Fork/Join3)Future4) Guarded Suspension 模式5)Balking 模式6)Thread-Per-Message 模式7)生产者-消费者模式8)Worker Thread 模式9)两阶段终止模式02 | 协作1)信号量(Semaphore)2)管程(Monitor): 包括 Lock&Condition 和 synchronized3)CountDownLatch4)原创 2020-07-07 20:28:47 · 156 阅读 · 0 评论 -
并发编程导论
并发编程导论01 | 导读1)很多人因为某个地方存在盲点,忽略了一些细节,导致无法写出正确高效的并发程序。2)很多人急于学习 Java 并发编程技术,却忽略了技术背后的理论和模型,而理论和模型却往往比具体的技术更为重要。3)并发编程并不是 Java 特有的语言特性,它是一个通用且早已成熟的领域,Java 只是根据自身情况做了实现。3、程序员对架构设计的理解存在很多误区1)成为架构师不一定不要很强的天分,只要用心学,掌握合适的学习方法,一定能学有所成02 | 架构设计的内容1、架构基础原创 2020-07-07 20:12:04 · 133 阅读 · 0 评论