Java并发与锁框架详述
该专栏用于对Java中的锁设计与实现进行详细的描述,并将JDK中基于锁实现的并发框架进行深入描述,同时对虚拟机对锁的优化措施也进行简单说明。
DreamMakers
凡办大事,以识为主,以才为辅,凡成大事,人谋居半,天意居半。
展开
-
基于Redis的分布式锁实现及思考
目前,几乎所有的大型网站及应用都是分布式部署的。分布式环境下的数据一致性是一个非常重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致性来...原创 2018-03-12 23:11:01 · 663 阅读 · 0 评论 -
Java并发与锁设计实现详述(11)- Java中的Condition
关于等待通知机制,在Java中主要有两种方式。一种是基于wait/notify方法集合synchronized关键字实现的,这在上一篇文章《Java并发与锁设计实现详述(10)- Java中的等待/通知机制》中已经讲述了,另一种方法是Condition结合Lock来实现。下面先把这两种方式进行一个简单的对比。Object的监控器方法和Condition接口的对比对比项Object Monitor ...原创 2018-04-22 00:20:01 · 6438 阅读 · 0 评论 -
Java并发与锁设计实现详述(10)- Java中的等待/通知机制
Java中的等待/通知机制是实现线程间通信的一种方式,是通过wait/notify/notifyAll等方法来完成的,这些方法又是什么含义呢?下面罗列了一下:等待/通知的相关方法方法名称描述notify()通知一个在对象上等待的线程,使其从wait()方法返回,而返回的前提是该线程获取到对象的锁notifyAll()通知所有等待在该对象上的线程,但是这些线程还需要竞争去获取对象锁wait()调用该...原创 2018-04-21 17:27:47 · 1075 阅读 · 0 评论 -
Java并发与锁设计实现详述(9)- 关键字volatile底层原理
我们都知道volatile关键字是用来实现变量在多线程之间的可见性的,它是java.lang.concurrnt包的核心。在这篇文章中将简单描述它是如何保证变量在多线程之间的可见性的。在此之前,可能需要先要了解一点CPU缓存的相关知识,从而保证我们更好的准确的使用volatile关键字。CPU缓存首先来看看CPU缓存,CPU缓存的出现主要是用来解决CPU运算速度和内存读取速度的不匹配问题,因为CP...原创 2018-03-27 22:36:18 · 470 阅读 · 0 评论 -
Java并发与锁设计实现详述(7)- Java并发类CountDownLatch、CyclicBarrier、Semaphore
在前面的文章中,我们对AQS(AbstractQueuedSynchronizer)进行了说明,AQS提供的是同步器的基本实现框架,在Java中我们并不是直接用AQS,因为它本身就是抽象的,我们只能用它的继承类。在这一篇文章中,我们就来看看几个基于AQS的同步器,仔细研究一下它们的原理及使用。在JDK中,基于AQS实现的同步器主要有CountDownLatch、CyclicBarrier、Sema...原创 2018-04-08 17:46:59 · 458 阅读 · 0 评论 -
Java并发与锁设计实现详述(6)- 聊一聊Unsafe
UnSafe这个类是什么?我相信刚接触Java的人或者没有深入研究过Java的人应该都不会知道存在这个类。这个类是干嘛的呢?在讲并发的这个系列里为什么我要提它呢?答案很简单,那就是这个类对于并发非常重要,当然它的重要性不仅体现在对并发的支持上。之所以这篇文章说到UnSafe,是因为UnSafe类是同步队列器AbstractQueuedSynchronizer的重要组成部分,是AbstractQue...原创 2018-03-29 17:50:21 · 2328 阅读 · 0 评论 -
Java并发与锁设计实现详述(5)- AQS(AbstractQueuedSynchronizer)的实现
在这篇文章中我们来看一个非常非常重要的东西,那就是AbstractQueuedSynchronizer,简称AQS,又叫队列同步器。为什么说它重要呢?因为它是Java并发包Java.util.concurrent的核心所在,讲到Java并发,如果不知道AQS那你说你懂并发可能就有点过了^_^Java.util.concurrent并发包是谁写的呢?是下面这个大神Doug Lea,先来看一眼,虽然这...原创 2018-04-07 09:19:18 · 965 阅读 · 0 评论 -
Java并发与锁设计实现详述(1)- Java线程状态
从这篇文章开始,我们正式进入Java并发与锁的世界。何为并发?何为锁?在Java中一般都是以线程为单位执行任务的,当多个线程在执行任务过程中在同一时间对某个共享资源进行访问时,我们称这种现象为并发,而为了保证多个线程在并发获取这个共享资源的时候不会出现状态不一致的问题或者相互影响,需要对这个共享资源进行限制,只有通过这个限制的线程才能获取到这个共享资源的控制和操作权,而锁就是对资源的限制,得到了锁...原创 2018-03-17 23:05:23 · 552 阅读 · 0 评论 -
Java并发与锁设计实现详述(0)- 内容总述
众所周知,并发问题是互联网开发过程中避免不了的问题,而与并发相关联的就是并发锁了,在Java中,并发和锁又是怎么设计的呢?又为我们提供了哪些并发包?这些并发包和底层的锁又是怎么实现的呢?在JDK之外,JVM又有没有对锁做一些优化处理呢?...为了弄清这些问题,才有了这个这个专栏,在这个专栏中通过几篇文章,将Java中关于并发和锁的设计和实现详细的进行说明,一方面便于在写的过程中便于自己理清思路,另...原创 2018-03-17 23:04:00 · 630 阅读 · 0 评论