并发编程
主要讲解JDK中的JUC部分,后期涉及到并发编程的实际应用
周仕林
这个作者很懒,什么都没留下…
展开
-
乐极生悲对象锁 -- synchronized、volatile与CAS
一:Synchronized1.1 场景简介了解JVM对象结构的攻城狮都知道对象头中有个锁状态标志,Synchronized实现基础就是依靠对象头中的锁标志,详情在JVM系列中解释。Synchronized这把重锁JDK1.6进行优化,锁的状态被划分为无锁、偏向锁、轻锁、重锁,锁的的等级只能上升不能下降。使用Synchronized三种场景下的加锁情况:实例方法默认锁this静态方法默认...原创 2019-04-26 14:45:10 · 600 阅读 · 0 评论 -
相濡以沫共进退 -- CyclicBarrier
一:风骚概述LOL进入游戏等待,很多召唤师都喜欢说你家用的小霸王吧?等待最慢一个召唤师加载100%后再开始展开召唤师峡谷的剧情,保证游戏公平。其实对于倒数计数器CountDownLatch与栅栏CyclicBarrier的区别个人认为仁者见仁智者见智,场景有重叠与特例,只要掌握其核心实现原理与功能,才能选择最佳的实现方式二:重要属性lock:独占锁保障线程安全trip:conditio...原创 2019-08-01 13:10:34 · 254 阅读 · 0 评论 -
执子之手与子偕老 -- CountDownLatch
一:风骚概述当方法A包含五个模块,如果串行执行将会消耗五个方法耗时之和。如果让五个模块在多线程作用执行,主线程等待子线程执行完毕后再返回,耗时将是最长子线程耗时。等待线程执行猛然想到join(),但是这里需要各个模块并发执行,重点就在于主线程与子线程执行状态的通信。JDK中提供并发工具类CountDownLatch实现该场景,若不具备AQS知识请绕道避免浪费时间二:线程等待API十分简单,若...原创 2019-07-30 11:09:41 · 199 阅读 · 0 评论 -
CAS原子操作 -- JDK实现原子操作类
一:概述多线程的数据安全问题一直是比较常见的多线程问题,衍生出系列如 ++ 运算线程安全,dubbo、long等64位操作数据安全问题。Java自JDK1.5开始,为基本类型、数组、引用对象类型等数据都提供了对应的原子操作类,即线程安全的操作类,其底层采用Unsafe类实现二:基础类型基本类型原子操作类JDK中提供三种实现,AtomicInteger、AtomicLong、AtomicBoo...原创 2019-07-29 15:59:06 · 179 阅读 · 0 评论 -
唯一限定私有量 -- ThreadLocal
一:概述首先搞清楚这个类作用在于为线程提供局部变量操作,其次就需要根据这个作用讨论它的实现原理以及一些可能出现的问题如内存泄漏等二:ThreadLocalMapThreadLocal与ThreadLocalMap的关系我理解为包装袋与包装品的关系,ThreadLocal只是为其内部类ThreadLocalMap提供一层包装,撕开虚伪的面具,发现面具下隐藏就是ThreadLocalMap2....原创 2019-07-16 13:47:10 · 486 阅读 · 2 评论 -
Java中的阻塞队列(五) --无容量队列SynchronousQueue
参考文章:https://www.cnblogs.com/leesf456/p/5560362.htmlJava中的阻塞队列(一) – 阻塞队列概览Java中的阻塞队列(二) – 有界队列 ArrayBlockingQueueJava中的阻塞队列(三) – 有界队列 LinkedBlockingQueueJava中的阻塞队列(四) – 有界优先级队列PriorityBlockingQueu...原创 2019-05-16 10:12:43 · 980 阅读 · 0 评论 -
阻塞队列(一) -- Array、Linked、Priority、Delay
一:继承结构二:阻塞详解阻塞队列学习第一个关键字应该是阻塞,何为阻塞?阻塞就是线程阻塞,直白一点多线程场景下的翻译就是线程安全。阻塞队列着重点在于底层数据结构与线程安全实现,阻塞队列研究应该从以下几方面入手:队列功能效果队列实现底层数据结构队列线程安全实现原理三:ArrayBlockingQueue基于数组实现的有界阻塞队列,重点在于以下几点的辨析:有界指的是什么界限阻塞...原创 2019-05-14 18:22:04 · 339 阅读 · 0 评论 -
文武双全读写锁 -- ReentrantReadWriteLock
1、ReentrantReadWriteLock类实现结构2、读写锁加锁流程3、读写锁加锁规则总结原创 2019-05-13 14:32:04 · 219 阅读 · 0 评论 -
群雄逐鹿独占锁 -- ReentrantLock
一:github轮子制造与操作实践以及设计思想实践二:Kahuna图片以及部分博客理论引用:微信公众号Alitaba119一:Lock PK SynchronizedLock锁性能真的比Synchronized强悍?Synchronized固有印象就是重锁,那么就得出结论能不用Synchronized就不用,甚至认为使用它B格一下降到了谷底。Synchronized在引入偏向锁等设计重写后并...原创 2019-05-05 16:30:25 · 383 阅读 · 0 评论 -
万丈高楼平地起 -- 并发基础(一)
万丈高楼平地起一:进程与线程1.1 概念辨析1.2 多线程意义二:线程状态三:线程优先级四:守护线程五:线程阻塞5.1 sleep5.2 wait5.3 yield六:线程中断6.1 中断标记6.2 检查中断七:线程串行一:进程与线程1.1 概念辨析现代操作系统运行程序时就会创建一个进程,系统调用的最小操作单元就是线程,一个进程多以拥有多根线程。例如QQ音乐就是一个进程,进程中的播放、下载、...原创 2019-04-28 16:33:56 · 210 阅读 · 0 评论 -
开天辟地启线程 -- 并发基础( 二 )
一:Runnable函数式接口,实现类实现唯一线程方法run()即可二:Thread实现接口Runnable,扩展出系列线程守护、状态、中断、睡眠、阻塞等操作。需要注意一点该类实例启动线程时使用start()并非调用run()三:CallableJDK1.5提供另一个函数式接口,区别于Runnable最大点在于异常抛出与返回值获取。配合FutureTask使用四:FutureTa...原创 2019-03-26 15:17:31 · 262 阅读 · 0 评论 -
弱肉强食信号量 --Semaphore
一:风骚概述前面介绍了计数器CountDownLatch与栅栏CyclicBarrier,本文介绍最后一个并发工具类Semaphore信号量。该工具类用于限流,有点类似于令牌桶。使用共享锁实现,线程争抢桶中令牌,成功则执行,失败则等待二:初始化令牌桶中令牌初始化数量在实例化对象时传入,使用AQS锁标记state维护保存。需要注意这个令牌数量并不是固定值,可以在程序运行过程中动态增长,这一点后...原创 2019-08-07 19:45:43 · 305 阅读 · 0 评论