同步器类
文章平均质量分 82
主要是JUC下同步器类的源码分析
zhanqinghua123
练武不练功,到老一场空
展开
-
Java同步器之CyclicBarrier源码分析
文章参考:AQS源码探究_08 CyclicBarrier源码分析_兴趣使然的草帽路飞-CSDN博客 简介 CyclicBarrier,回环栅栏,它会阻塞一组线程直到这些线程同时达到某个条件才继续执行。它与CountDownLatch很类似,但又不同,CountDownLatch需要调用countDown()方法触发事件,而CyclicBarrier不需要,它就像一个栅栏一样,当一组线程到达栅栏处才能继续往下走。 使用案例 public class CyclicBarrierTest {转载 2021-08-05 17:58:03 · 90 阅读 · 0 评论 -
Java同步器之CountDownLatch源码分析
问题 1.CountDownLatch是什么? 2.CountDownLatch具有哪些特性? 3.CountDownLatch通常运用在什么场景中? 4.CountDownLatch的具体次数是否可以调整 简介 CountDownLatch,可以翻译为倒计时器,但是也不太准确,它的含义主要是允许一个或多个线程等待其他线程的操作执行完毕后再执行后续的操作。 CountDownLatch的用法和Thread.join()有点类似,等待其他线程都执行完成后再执行主任务。 继承结构 Coun原创 2021-08-05 11:14:08 · 75 阅读 · 0 评论 -
Java同步器之ReentrantLock源码解析2
问题 (1)条件锁是什么? (2)条件锁适用于什么场景? (3)条件锁的await()是在其它线程signal()的时候唤醒的吗? 简介 条件锁,是指在获取锁之后发现当前业务场景自己无法处理,而需要等待某个条件出现才可以继续处理时使用的一种锁。 比如,在阻塞队列中,当队列中没有元素的时候是无法弹出一个元素的,这时候就需要阻塞在条件notEmpty上,等待其他线程往里面放入一个元素后,唤醒这个条件notEmpty,当前线程才可以继续去做弹出元素的行为。 注意,这里的条件,必须是在获取锁之后去等待原创 2021-08-04 15:54:59 · 58 阅读 · 0 评论 -
Java同步器之ReentrantLock源码分析1
文章部分参考彭哥读源码。 问题 (1)重入锁是什么? (2)ReentrantLock如何实现重入锁? (3)ReentrantLock为什么默认是非公平模式? (4)ReentrantLock除了可重入还有哪些特性? 简介 Reentrant = Re + entrant,Re是重复、又、再的意思,entrant是enter的名词或者形容词形式,翻译为进入者或者可进入的,所以Reentrant翻译为可重复进入的、可再次进入的,因此ReentrantLock翻译为重入锁或者再入锁。 重入锁,原创 2021-08-04 14:19:57 · 67 阅读 · 0 评论 -
Java同步系列之AbstractQueuedSynchronizer源码分析3
文章参考:(4条消息) AQS源码探究_04 成员方法解析(释放锁、响应中断出队逻辑)_兴趣使然的草帽路飞-CSDN博客 AQS成员方法解析(释放锁的逻辑) 1.unlock释放锁方法 //位于ReentrantLock中:释放锁的方法 public void unlock() { //调用AQS中的release方法 sync.release(1); } 2.release真正释放锁的方法 //ReentrantLock.unl原创 2021-08-04 10:21:15 · 101 阅读 · 0 评论 -
Java同步系列之AbstractQueuedSynchronizer源码分析1
文章参考:(4条消息) AQS源码探究_02 AQS简介及属性分析_兴趣使然的草帽路飞-CSDN博客 1.简介 AQS的全称是AbstractQueuedSynchronizer,它的定位是为Java中几乎所有的锁和同步器提供一个基础框架。 AQS是基于FIFO的队列实现的,并且内部维护了一个状态变量state,通过原子更新这个状态变量state即可以实现加锁解锁操作。 2.主要属性 //队列的头结点:任何时刻,头结点对应的线程就是当前持有锁的线程 private原创 2021-08-03 16:54:50 · 120 阅读 · 0 评论 -
Java同步系列之AbstractQueuedSynchronizer源码分析2
简介原创 2021-08-03 16:36:47 · 81 阅读 · 0 评论 -
Java同步系列之synchronized
面试题:谈谈你对synchronized的理解 可以从synchronized的特性,实现原理,是否可重入,是否是公平锁,synchronized的优化,锁升级的过程,synchronized的使用方式来说。 简介 synchronized关键字是Java里面最基本的同步手段,它经过编译之后,会在同步块的前后分别生成monitorenter和monitorexit字节码指令,这两个字节码指令都需要一个引用类型的参数来指明要锁定和解锁的对象。 实现原理 在学习Java内存模型的时候,我们介绍过两个指原创 2021-07-30 16:10:17 · 150 阅读 · 0 评论 -
Java同步系列之volatile
面试题:说说你对volatile的理解? 说出三个点 1.保证可见性 2.不能保证原子性 3.禁止指令重排序 简介 volatile是Java中的一个关键字,volatile可以说是Java虚拟机提供的最轻量级的同步机制。当一个变量被定义成volatile之后,它就保证了此变量对所有线程的可见性,另外volatile并不能保证原子性,还有一个特性就是它能禁止指令重排序。 面试官问时,可以这样说,然后再说如何保证可见性和怎样能禁止指令重排序,里面的原理是什么? volatile保证可见性 ...原创 2021-07-30 11:30:41 · 162 阅读 · 0 评论 -
Java同步系列之JMM
Java内存模型(Java Memory Model,JMM)是在硬件内存模型基础上更高层的抽象,它屏蔽了各种硬件和操作系统对内存访问的差异性,从而实现让Java程序在各种平台下都能达到一致的并发效果。 Java内存模型定义了程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出这样的底层细节。这里所说的变量包括实例字段、静态字段,但不包括局部变量和方法参数,因为它们是线程私有的,它们不会被共享,自然不存在竞争问题。 ...原创 2021-07-30 09:24:01 · 99 阅读 · 0 评论