并发编程—学习攻略

转载:https://blog.csdn.net/small_love/article/details/110128873

并发编程的知识点多且又杂,并发中的概念很多并且技术点也很凌乱,看了很多有关并发的书籍,大牛写的博客等,不能很好的掌握学习知识的方法和技巧,花费了时间和精力,还是不能很好地掌握并发的知识,但那么如何才能学好并发编程呢?

其实也很简单,只要从两个方面一下就可以突破了。一个是“跳出来、看全景”,一个是“钻进去,看本质”。

一、跳出来,看全景

学习知识最忌讳的就是“盲人摸象”,只看局部,而没有先看到全局。有些人还没有把最基本的什么是并发编程,并发编程的本质是什么,上来就撸源码,看的是晕头转向,从而感慨一句“并发编程真难”,就搁置了。

并发编程的概念多而散: 线程安全、锁、同步、异步、互斥、死锁、活锁、阻塞队列、并发队列、信号量等等,如果没有先搞清楚并发的全景本质,而是一个一个的去扒知识点,更甚者直接去撸源码,那么很可能搞了好久还是搞不清楚。

那么并发编程的全景又是什么呢?

 说白了并发编程领域可以简单的抽象为三个核心问题:分工、同步和互斥。

人们为了追求性能,把CPU的利用率发挥到极致,所有就把大任务拆分为一个一个的小任务(分工)、各个任务之间可能又存在依赖(同步)、为了保证数据的正确性多个小任务之间对共享变量的修改有需要进行保护(互斥)。

1、分工

所谓分工,类似于现实中一个组织完成一个项目,项目经理需要拆分任务,安排合适的成员去完成。在并发编程领域,你就是项目经理,线程就是项目组成员。任务分解和分工对于项目成败非常关键,不过在并发领域里,分工更重要,它直接决定了并发程序的性能。

结合到Java中就有JDK并发包中的 Executor、Fork/Join、Future等。

2、同步

所谓同步就是你分好工后,各个成员做自己的任务,但是成员负责的模块可能存在依赖,所有需要沟通交流,协作完成一项工作。在并发编程领域里的同步,主要是指线程间的协作。线程之间的协作本质上可以描述为“当某个条件不满足时,线程需要等待,当某个条件满足时,线程需要被唤醒执行”。

结合到Java SDK就有 CountDownLatch、CyclicBarrier、Phaser、Exchanger等。

3、互斥

 映射到现实世界中就类似于蹲坑,同一个坑同一时间只能有一个人占有,为了防止一个人占有坑位后,其他人在占有,那么先占有的人就会把门锁上。所在并发编程领域就是同一时刻,只允许一个线程访问共享变量,那么实现互斥的核心技术也是加锁。随时加锁解决了安全问题,但同时也带来了性能问题,那如何保证安全的同时又尽量提高性能呢?JDK里有提供了 ReadWriteLock、StampedLock、还有就是CAS无锁技术。

并发编程全景图

二、钻进去,看本质

跳出来看到全景后,还需要“钻进去”,深入理解,找到本质。探索每个知识点,掌握其实现本质。Java 语言里的并发技术基本都是有理论基础的,并且这些理论在其他编程语言里也有类似的实现。所以我认为,技术的本质是背后的理论模型。不但要知其然,还要知其所以然。

三、总结

学习并发编程,不能上了就看并发包,撸源码,这样知识点太多太杂,很容易放弃,首先是跳出来抽象出其全景,掌握其全集后,在钻进去抠细节,掌握其实现原理和本质。


参考资料:

   Java并发编程实战

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树并发并发的定义 59244 人正在系统学习中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值