![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发
文章平均质量分 79
unknown-null
这个作者很懒,什么都没留下…
展开
-
Java中的原子操作类
目录综述1.原子更新基本类型类2.原子更新数组3.原子更新引用4.原子更新字段类综述JDK从1.5开始提供了java.util.concurrent.atomic包。通过包中的原子操作类能够线程安全地更新一个变量。包含4种类型的原子更新方式:基本类型、数组、引用、对象中字段更新。atomic包中的原子操作类基本上内部都是使用Unsafe类实现的,原子更新的实质其实就是获取内存偏移地址,对地址中的变量进行更新。1.原子更新基本类型类atomic包内包..原创 2021-03-22 15:28:41 · 98 阅读 · 0 评论 -
Java中的Unsafe类
目录1.Unsafe类介绍1.1实例化私有类1.2CAS操作,通过内存偏移地址修改变量值1.3直接内存访问2.Unsafe类源码分析2.1Class相关2.2Object相关2.3数组相关2.4并发相关2.4.1CAS相关2.4.2线程调度相关2.4.3volatile相关读写2.4.4内存屏障相关2.5直接内存访问(非堆内存)2.6系统相关3.参考资料1.Unsafe类介绍Unsafe类是在sun.misc包下,不属于Java标准。.原创 2021-03-22 15:26:25 · 94 阅读 · 0 评论 -
Java7、8中的HashMap、ConcurrentHashMap学习总结
1.HashMap 1.7与1.8有什么区别?数据结构上JDK1.7的时候使用的是数组+ 单链表的数据结构。数组和链表节点的实现类是Entry类。 在JDK1.8及之后时,使用的是数组+链表+红黑树的数据结构(当链表的深度达到8的时候,也就是默认阈值,就会自动扩容把链表转成红黑树的数据结构来把时间复杂度从O(n)变成O(logN)提高了效率)。数组和链表节点的实现类是Node类。Hash值的计算上JDK1.7用了9次扰动处理=4次位运算+5次异或 JDK1.8只用了2次扰动处理=1次位运算原创 2021-01-13 11:09:48 · 95 阅读 · 0 评论 -
《Java并发编程的艺术》第5章 Java中的锁(下)
目录AQS重入锁ReentrantLock1.可重入实现原理2.公平锁与非公平锁实现原理读写锁ReadWriteLock什么是读写锁1.读写状态的设计2.写锁的获取与释放2.1写锁的获取2.2写锁的释放3.读锁的获取与释放3.1读锁的获取3.2读锁的释放Condition实现原理什么是Condition1.等待队列2.等待(await()方法)3.通知(signal()、signalAll()方法)AQS获取锁失败,入队,.原创 2020-12-30 11:49:23 · 133 阅读 · 0 评论 -
Java并发复习笔记
目录1.并发编程三大特性——原子性、可见性、有序性2.Java内存模型(JMM)是什么?3.volatile作用是什么?volatile使用时的注意事项。4.synchronized的实现原理5.CAS是什么?使用CAS注意事项以及如何解决?6.happens-before原则7.JVM对锁的优化(偏向锁、轻量级锁、重量级锁)1.并发编程三大特性——原子性、可见性、有序性1).原子性(Lock、synchronized可以保证原子性,volatile无法保证原子.原创 2020-12-30 11:41:45 · 102 阅读 · 1 评论 -
并发编程三大特性——原子性、可见性、有序性
目录1、原子性2、可见性3、有序性在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。1、原子性即一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。一个很经典的例子就是银行账户转账问题:比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。试想一下,如果这2个操作不具备原子性,会造成什么样的后果。假如从账户A减去1000元之后,操作突然中止。然后又从B取出了50.原创 2020-12-30 11:36:51 · 361 阅读 · 0 评论 -
线程池详解
目录为什么用线程池,优势在哪里?线程池如何使用?架构说明编码实现了解重点线程池ThreadPoolExecutor的7大参数介绍线程池的底层工作原理线程池的4种拒绝策略何时触发拒绝策略?4种拒绝策略在实际生产过程中,使用下面的哪一个线程池?(大坑)线程池合理配置线程数1.确定CPU核数2.对于CPU密集型3.对于IO密集型为什么用线程池,优势在哪里?线程池如何使用?架构说明编码实现了解..原创 2020-11-20 18:01:46 · 155 阅读 · 1 评论 -
阻塞队列
为什么用?有什么好处?BlockingQueue的核心方法SynchronousQueue/** * 程序输出结果: * AAA put 1 * BBB 获取到1 * AAA put 2 * BBB 获取到2 * AAA put 3 * BBB 获取到3 * * 可以看到是BBB线程消费完,AAA线程再放入的。 */public class SynchronousQueueDemo { public static void main...原创 2020-11-19 10:12:15 · 60 阅读 · 0 评论 -
面试题-JUC多线程与高并发
1.请谈谈你对volatile的理解2.CAS你知道吗3.谈谈原子类AtomicInteger的ABA问题?原子引用知道吗?4.ArrayList是线程不安全的,编写一个不安全的案例并给出解决方案5.公平锁/非公平锁/可重入锁/递归锁、自旋锁谈谈你的理解?请手写一个自旋锁6.CountDownLatch/CyclicBarrier/Semaphore使用过吗?7.阻塞队列知道吗8.线程池用过吗?ThreadPoolExecutor谈谈你的理解9.线程池用过吗?生产上如何配置合原创 2020-11-06 11:25:26 · 141 阅读 · 0 评论 -
面试题-JUC多线程与高并发-ArrayList是否线程安全?
ArrayList是线程不安全的,请编写一个不安全的案例并给出解决方案线程不安全案例public class ContainerNotSafeDemo { public static void main(String[] args) { List<String> list = new ArrayList<>(); /** * 解决方案1:使用Vector */// List<原创 2020-11-06 10:58:47 · 178 阅读 · 0 评论 -
面试题-JUC多线程与高并发-CAS你知道吗
CAS你知道吗1.CAS是什么比较并交换2.CAS底层原理?如果知道,谈谈你对Unsafe的理解Unsafe类CAS是什么3.CAS缺点1)循环时间长开销大。2)只能保证一个共享变量的原子操作。3)ABA问题...原创 2020-11-05 21:32:11 · 134 阅读 · 0 评论 -
面试题-JUC多线程与高并发-请谈谈你对volatile的理解
1.请谈谈你对volatile的理解1)volatile是JVM提供的轻量级的同步机制三大特性:保证可见性 不保证原子性 禁止指令重排序2)你谈谈JMM3)你在哪些地方用到过volatile2.CAS你知道吗3.原创 2020-11-05 18:38:44 · 96 阅读 · 0 评论 -
理解AQS
1.前置知识公平锁和非公平锁可重入锁LockSupport自旋锁(CAS)数据结构之链表设计模式之模板设计模式2.是什么1)字面意思:抽象的队列同步器抽象的:说明是个抽象类,提供了很多模板方法供子类实现队列:对抢不到锁的队列进行管理同步器:2)技术解释是用来构建锁或者其他同步组件的重量级基础框架,通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类型变量表示持有锁的状态。是整个JUC体系的基石。(FIFO队列 + state...原创 2020-11-03 18:46:45 · 237 阅读 · 0 评论 -
从ReentrantLock的lock和unlock方法理解AQS运行过程
目录1.ReentrantLock的原理2.公平锁与非公平锁3. 从非公平锁的lock和unlock方法理解AQSA线程中lock.lock()方法B线程中的lock.lock()方法tryAcquire(arg)方法addWaiter(Node.EXCLUSIVE)方法acquireQueued()方法C线程中lock.lock()方法A线程中lock.unlock()B线程(C线程同理)1.ReentrantLock的原理2.公平锁与原创 2020-11-03 18:29:05 · 178 阅读 · 0 评论