J.U.C框架学习顺序

背景

        Java concurrent包提供了很多高性能的并发类,类的设计思路及源码值得我们学习参考,但在学习其原理过程中,作者经常碰到这种情况,在学习ConcurrentHashMap时,里面的部分方法操作牵扯到其他类,例如Unsafe、ReentrantLock,又需要了解ReentrantLock,进而又去学习AQS原理,导致整个学习过程非常的复杂,没有条理性,所以本文主要介绍根据作者经验总结的J.U.C框架学习顺序。


1.CAS与sun.misc.Unsafe

        Concurrent包下所有类底层都是依靠CAS操作来实现,而sun.misc.Unsafe为我们提供了一系列的CAS操作。这里我们首先要了解什么是CAS,然后对sun.misc.Unsafe类的重要方法,例如compareAndSwapObject(Object o, long offset, Object expected, Object x)、park(boolean isAbsolute, long time)等,要理解其参数含义以及方法的作用,最终能够理解conncurrent包源码中Unsafe操作的意义。
        参考:CAS与sun.misc.Unsafe


2.学习J.U.C类框架图

        研究具体的类原理前需要对整个框架有一个大概的认识,整个框架分为五个模块,部分高级模块会依赖其他基础模块,所以后面将列举每个模块的研究顺序。
图片引自百度


3.Atomic

        该包下主要是一些原子变量类,仅依赖于Unsafe,并且被其他模块所依赖,同时在实际编程中应用较普遍,所以需要先研究该包。重点理解AtomicBoolean、AtomicInteger、AtomicLong的原理(底层逻辑较简单,直接调用Unsafe操作实现),有精力可以看看原子数组的实现,其他的类可暂时不看,在实际应用及码源中几乎很少用到。


4.Locks

        该包下主要是关于锁及其相关类,仅依赖于Unsafe或内部依赖,并且被其他高级模块所依赖。由于LockSupport类底层逻辑简单且仅依赖Unsafe,同时为其他高级模块所依赖,所以需要先了解LockSupport类的运行原理,然后重点研究AbstractQueuedSynchronizer框架,理解独占锁和共享锁的实现原理,并清楚Condition如何与AbstractQueuedSynchronizer进行协作,最后很容易就能理解ReentrantLock是如何实现的。


5.Collections

        该包会依赖Unsafe和前两个基础模块,并且模块内部各个容器间相互较为独立,所以没有固定的学习顺序,理解编程中常用的集合类原理即可:ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteArraySet、ArrayBlockingQueue、LinkedBlockingQueue(阻塞队列在线程池中有使用,所以理解常用阻塞队列的特性很重要)


6.Executor

        这一部分的核心是线程池的运行原理,也是实际应用中较多的部分,会依赖于前几个模块。首先了解Callable、Future、RunnableFuture三个接口间的关系以及FutureTask的实现原理,然后研究如何创建ThreadPoolExecutor,如何运行一个任务,如何管理自身的线程,同时了解RejectedExecutionHandler的四种实现差异,最后,在实际应用中学习如何通过调整ThreadPoolExecutor的参数来优化线程池。


7.Tools

        这一部分是以前面几个模块为基础的高级特性模块,实际应用的场景相对较少,主要应用在多线程间相互依赖执行结果场景,没有具体的学习顺序,最好CountDownLatch、CyclicBarrier、Semaphore、Exchanger、Executors都了解下,对后面学习Guava的框架有帮助。


参考:
http://ifeve.com/doug-lea/
http://www.cnblogs.com/chenpi/archive/2016/07/06/5614290.html
http://www.cnblogs.com/chenpi/archive/2016/07/06/5614290.html#_label5

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值