并发编程
谈到并发编程,可能很多人都有过经验,甚至比我了解的更多。
那么并发与并行的区别又是什么?
并发编程是编程中的核心问题,实践中,当人们希望利用计算机处理一些现实世界问题,以及希望同时处理多个问题的时候,并发也就出现了。在需要对同一共享资源进行操作,多个事务之间存在关联,人们把这种看起来多个事务同时运行的特性称为并发性。有个经常容易跟并发混肴的概念叫并行,其实真正懂了之后理解并不困难,可以把并行看过是并发实现中某个局部可以引入的运行设施;在讨论并发时,我们一般不需要假设这个运行或者调度设施究竟是怎么实现的,尽管也有一些时候为了效率因素我们会根据这一点来选择恰当的算法或者实现。实现上来看,并发和并行的不同之处,主要在于并发更关注共享或者同步是如何实现的,而并行作为一个局部,注重于如何划分事务,把不相关的部分剥离开来。
可能有的人就会说了:我工作中用不到并发啊?
但事实上面试时并发编程这块还是很重要的,需要大家去捡起这方面的知识来。
这篇文章就主要与大家谈一谈Java领域的并发,以及JAVA并发工具,还与大家谈谈其他领域的并发问题。
大家可以先看一下脑图,让自己脑子里对并发的有一个清晰的认知。
![f67309bd8d156cb4aa9c871ca9b8ba57.png](https://i-blog.csdnimg.cn/blog_migrate/397851aac1f6efc01257f32da27d6829.jpeg)
看完脑图后如果你还还觉得自己对并发编程原理方面理解一点都不透彻,面试也会有点发怵,那么不妨来看看下面这4份并发编程神仙笔记。(文末还有更多相关资料分享)
- 共享模型篇
- 应用篇
- 原理篇
- 模式篇
共享模型篇
以并发、并行为主线,穿插讲解
![dd938f1312c47f8ea82165466c021f81.png](https://i-blog.csdnimg.cn/blog_migrate/5e06b8e36da6a008da69ab106ff2d119.jpeg)
![330c658be8e47022f35e5007ddac7aa5.png](https://i-blog.csdnimg.cn/blog_migrate/f261ba5caa4b1a47a6323f05fc1d72e0.jpeg)
进程与线程
![d7d006ba5212c3efd6e1d6bfd405de7d.png](https://i-blog.csdnimg.cn/blog_migrate/a716412fef04218c9b85d779cf03f6c4.jpeg)
Java线程
![90e7792de147ed7df730d342a894f281.png](https://i-blog.csdnimg.cn/blog_migrate/84251f705a048f2ebc05ff13e62e5ef9.jpeg)
共享模型之管程
![abc05ea44d2854e3adfcef69e2a03b98.png](https://i-blog.csdnimg.cn/blog_migrate/05ee45d4789afa3f6b333e79e4b674e1.jpeg)
共享模型之内存
![042daf2a96a4ecb32f646fd76db7fff6.png](https://i-blog.csdnimg.cn/blog_migrate/e6ac566506af91442464269def389b44.jpeg)
共享模型之无锁
![0203a59cab5f09fdd52c339baece0367.png](https://i-blog.csdnimg.cn/blog_migrate/0377de3aafcfbf3b282a02084d370ae8.jpeg)
共享模型之不可变
![ee2d21e44dfc2d584019b98cc249b197.png](https://i-blog.csdnimg.cn/blog_migrate/751d37fe309f247e48aee0ae134cbeb9.jpeg)
共享模型之工具
![f43f2a432f1eb59352638c664633d225.png](https://i-blog.csdnimg.cn/blog_migrate/5777d366e34f0e5250ab7095253582e7.jpeg)
篇幅限制只能这样简单的展示出来了,需要全部笔记的小伙伴帮忙点赞转发加关注小编支持一下,然后私信【666】即可得到获取方式~
应用篇(结合实际)
![5e057f9d51ea1f1e86b810ae8e1b7d2b.png](https://i-blog.csdnimg.cn/blog_migrate/5299d7c01af60f9cf89344d935849b01.jpeg)
![e7a10728cbeee765551e6d5c3fb3ad80.png](https://i-blog.csdnimg.cn/blog_migrate/839c0a9ba97599e7178cfb21cf733643.jpeg)
原理篇(了然于心)
![6026c08066b6beaddde8fd4e4c8c6f15.png](https://i-blog.csdnimg.cn/blog_migrate/49e07d23ebc2ddbb2ea97843307d50f3.jpeg)
![f42308cf3ab66d2ad91808ae67a2ed11.png](https://i-blog.csdnimg.cn/blog_migrate/8438297befff47a71e4186cbdfccf9aa.jpeg)
![4ba103e914626961ebc4876ad51110ee.png](https://i-blog.csdnimg.cn/blog_migrate/89ab1e12b5e3ff9108dde522fca437a9.jpeg)
模式篇(正确姿势)
![b7d614f2fe21e34c1cccdbe0eb2efe2a.png](https://i-blog.csdnimg.cn/blog_migrate/1bbda1dbdfb70b1fd937041479973fb3.jpeg)
![999cd776125bec87585d746a61e6d154.png](https://i-blog.csdnimg.cn/blog_migrate/2d9f4624878061ed9ad423372a9cc317.jpeg)
![71bc5a345177002b5aaa86f5aeaf6289.png](https://i-blog.csdnimg.cn/blog_migrate/bc56046207bce7909fd9f448809a6beb.jpeg)
最后
并发编程乃至一般性编程在技术原理上已经走到了尽头,相关技术也已经在一些语言平台上得到采纳和应用。但出于存在的极个别问题,以及对应用理解的不足,导致在实践中,它们也都还欠缺最后那么一点火候。同时,更多人是依赖平台提供的手段在理解处理问题,而没有从根本上考虑过这些问题,也是应用发展缓慢的一个原因。我们做开发的,首先还是得把底层原理学扎实了才行。这四份笔记也可以让大家查漏补缺。另外还整理了一些额外的相关并发编程资料,以及一些xmind脑图(电脑上刚卸载这个软件,不能给大家展示出来了)。
![34f43f5e34e4a437a27db116babb3f58.png](https://i-blog.csdnimg.cn/blog_migrate/cfeb5dba5dbf06475f4f656468049a74.jpeg)
![3bbe9eca32b1f1a78ee884d84f988fac.png](https://i-blog.csdnimg.cn/blog_migrate/4f681ae5878b69e3333305bc6063d500.jpeg)
篇幅限制为了不影响大家的阅读体验只能以这样的形式展示出来了,需要这些资料的小伙伴,帮忙点赞转发加关注小编支持一下,然后私信【666】即可得到获取方式