并发编程
谈到并发编程,可能很多人都有过经验,甚至比我了解的更多。
那么并发与并行的区别又是什么?
并发编程是编程中的核心问题,实践中,当人们希望利用计算机处理一些现实世界问题,以及希望同时处理多个问题的时候,并发也就出现了。在需要对同一共享资源进行操作,多个事务之间存在关联,人们把这种看起来多个事务同时运行的特性称为并发性。有个经常容易跟并发混肴的概念叫并行,其实真正懂了之后理解并不困难,可以把并行看过是并发实现中某个局部可以引入的运行设施;在讨论并发时,我们一般不需要假设这个运行或者调度设施究竟是怎么实现的,尽管也有一些时候为了效率因素我们会根据这一点来选择恰当的算法或者实现。实现上来看,并发和并行的不同之处,主要在于并发更关注共享或者同步是如何实现的,而并行作为一个局部,注重于如何划分事务,把不相关的部分剥离开来。
可能有的人就会说了:我工作中用不到并发啊?
但事实上面试时并发编程这块还是很重要的,需要大家去捡起这方面的知识来。
很多同学学习Java并发一头扎进源码, 最后头破血流,无功而返。横看成岭侧成峰,远近高低各不同。学习要始终从不同的视角来看待问题。学习并发亦是如此,需要通过理论远看轮廓,然后通过源码近看明细。希望阿嘴今天为您分享的这份JAVA 并发编程,能让⼤家学透且能深耕并发内容。
文章内容过多,为了不影响大家的阅读体验,小编会为大家尽可能地展示。如果你需要完整版PDF学习资源请直接私【666】即可获取!
- 并发世界很有趣,不要错过
- 学 并发编程,透彻理解三个核心是关键
- 并发Bug之源有三,找对根源是关键
- 有序性可见性,Happens-before 来搞定
- 解决原子性问题,首先需要宏观理解
- 如何学并发、计划、并发开胃菜、分工
- 同步/协作、互斥
- 可见性、原子性 有序性
- Happens-before、锁
- happens-before之volatile 变量规则、内存屏障(Memory Brrers / Fences)
- volatile写-读的内存语义
- 面试volatile关键字,应该具备哪些谈资?
- 共享资源那么多,如何用一把锁保护多个资源?
- 如何避免死锁?其实有套路可循
- volatile和synchronized到底啥区别?
- 换个角度理解线程生命周期就简单了
- happens-before之volatile变量规则、内存屏障(Memory Barriers / Fences)
- volatile写-读的内存语义、保护多个资源
- 正确姿势、如何避免死锁?、Java内存模型(JMM)
- synchronized、volatile、为什么要了解线程的生命周期?
- 线程生命周期的几种状态、如何查看线程处在什么状态
- 面试 问创建多少个线程合适该怎么说?
- 手动创建线程很简单, 为什么要使用线程池?
- 等待/通知机制,和想象的并不完全一样
- 贯穿并发编程的中断机制
- 图解AQS (独占式)以及Reentrantl ock
- 图解AQS (共享式) 以及Semaphore
- 小学数学搞定ReentrantReadWriteL ock
- 一网打尽 CountDownl atch和CyclicBarrier
- 为什么要使用多线程?、并发编程适用于什么场景?
- 创建多少个线程合适?、增加CPU核数一定能解决问题吗?
- 手动创建线程有什么缺点?、什么是线程池?、线程池使用思想/注意事项
- 并发编程为什么会有等待通知机制、等待/通知机制
- 为什么说尽量使用notifyAll()、什么时候可以使用notify0
- MESA模型、什么是中断机制?、为什么会有中断机制?
- interrupt0 VS islnterrupted0 VS interrupted0、中断机制的使用场景
- 使用中断机制有哪些注意事项、JDK中有哪些使用中断机制的地方呢?
- Java SDK为什么要设计Lock、显式锁Lock、队列同步器AQS
- AQS实现分析、ReentrantL ock是如何应用的AQS
- AQS中的共享式获取同步状态、Semaphore的应用及源码分析、ReadWriteL ock
- 读写锁的升级与降级、CountDownl atch、CyclicBarrier
- 会用Java Future,你泡茶也很快
- CompletableFuture用串行方式搞定并发编程
- 既生ExecutorService何生CompletionService?
- Callable、Runnable vs Cllable、ExecutorService
- Future、FutureTask、几个重要Lambda函数
- CompletableFuture、ExecutorService VS CompletionService
- 远看CompletionService轮廓、近看CompletionService源码
- CompletionService的主要用途
- 分分钟搞定Java并发队列
- ForkJoinPool大剖析
- ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue
- DelayQueue、SynchronousQueue、LinkedTransferQueue
- LinkedBlockingDeque、分治思想、ForkJoin
- 源码分析(UDK1.8)、Fork/Join图解、完整调用图解
总结
并发编程乃至一般性编程在技术原理上已经走到了尽头,相关技术也已经在一些语言平台上得到采纳和应用。但出于存在的极个别问题,以及对应用理解的不足,导致在实践中,它们也都还欠缺最后那么一点火候。同时,更多人是依赖平台提供的手段在理解处理问题,而没有从根本上考虑过这些问题,也是应用发展缓慢的一个原因。我们做开发的,首先还是得把底层原理学扎实了才行。另外还整理了一些额外的相关并发编程资料,以及一些xmind脑图(电脑上刚卸载这个软件,不能给大家展示出来了)。
需要并发编程资料的小伙伴可以直接私【666】即可获取!