
突击并发编程JUC系列
山间木匠
欢迎关注公众号“山间木匠”,后端(java、spring、spring cloud)、前端(小程序、VUE)等你来撩!!!
展开
-
【JVM系统学习之路】对象的实例化内存布局与访问定位
JVM系统学习之路系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial前言对象在JVM中是怎么存储的?对象头信息里面有哪些东西?Java对象头有什么?对象的实例化对象创建方式new:最常见的方式、单例类中调用变形1: getInstance的静态类方法变形2 : XXXBuilder/XXXFactory 的静态方法Class 的 newInstance 方法:在 JDK9 里面被标记为过时的方法,因为只能调用空参构.原创 2020-11-24 09:00:25 · 139 阅读 · 0 评论 -
突击并发编程JUC系列-万字长文解密 JUC 面试题
突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial什么是 CAS 吗?CAS(Compare And Swap)指比较并交换。CAS算法CAS(V, E, N)包含 3 个参数,V 表示要更新的变量,E 表示预期的值,N 表示新值。在且仅在 V 值等于 E值时,才会将 V 值设为 N,如果 V 值和 E 值不同,则说明已经有其他线程做了更新,当前线程什么都不做。最后,CAS 返回当前 V 的真实值。Concurrent包下所有.原创 2020-10-26 09:20:04 · 411 阅读 · 1 评论 -
突击并发编程JUC系列-阻塞队列 BlockingQueue
突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial什么是阻塞队列阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线.原创 2020-10-23 09:35:36 · 215 阅读 · 0 评论 -
突击并发编程JUC系列-并发容器ConcurrentHashMap
突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial本节让我们一起研究一下该容器是如何在保证线程安全的同时又能保证高效的操作。ConcurrentHashMap是线程安全且高效的HashMap。为什么要使用ConcurrentHashMap在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于以上两个原因,便有了ConcurrentHashMap的登场机会。线程不安全的Has.原创 2020-10-16 09:26:15 · 622 阅读 · 0 评论 -
突击并发编程JUC系列-Locksupport 与 Condition
突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorialLocksupportJDK 中的 rt.jar 包里面的 LockSupport 是个工具类,当需要阻塞或唤醒一个线程的时候,都可以使用 LockSupport 工具类来完成相应工作。LockSupport定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能,而LockSupport 也成为构建同步组件的基础工具。LockSupport定义了一组以 park 开.原创 2020-10-15 09:17:46 · 397 阅读 · 0 评论 -
突击并发编程JUC系列-ReentrantReadWriteLock
突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial本章节将学习 ReentrantReadWriteLock(读写锁),ReadWriteLock 也是 java 5之后引入的,之前提到锁(如Mutex和ReentrantLock)基本都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离.原创 2020-10-13 09:10:41 · 198 阅读 · 1 评论 -
突击并发编程JUC系列-ReentrantLock
突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial锁是用来控制多个线程访问共享资源的方式,通过锁可以防止多个线程同时访问共享资源。在 Java1.5之前实现锁只能使用 synchronized关键字实现,但是synchronized隐式获取释放锁,在 1.5之后官方新增了 lock 接口也是用来实现锁的功能,,它具备与synchronized关键字类似的同步功能,显式的获取和释放锁。lock拥有了锁获取与释放的可操作性、可中断的.原创 2020-10-10 08:54:18 · 172 阅读 · 0 评论 -
突击并发编程JUC系列-并发工具 Semaphore
突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial前面两个章节学习了 CountDownLatch 和 CyclicBarrier ,他们都是递减同步器,今天学习递增同步器 Semaphore。Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。看到这个信号量我的脑海中就出现了红绿灯,为了保证学生的安全,学校的十字路口一般都设有红绿灯,车流量控制,每一次绿灯同时能通.原创 2020-09-30 09:12:55 · 1532 阅读 · 0 评论 -
突击并发编程JUC系列-并发工具 CyclicBarrier
突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial俗话说趁热要打铁,上篇中介绍的 CountDownLatch 的基本用法, CountDownLatch 计数器是一次性的,也就是等到计数器值变为0后,再调用CountDownLatch的await和countdown方法都会立刻返回,这就起不到线程同步的效果了。对于部分业务需要多次循环使用,就可以使用本章节的 CyclicBarrier,CyclicBarrier的字面意思是.原创 2020-09-29 09:34:33 · 249 阅读 · 0 评论 -
突击并发编程JUC系列-并发工具 CountDownLatch
突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial小伙伴们,大家好,我们又见面了,突击并发编程JUC系列实战并发工具发车了。新的章节还是新的故事讲解,不知各位小伙伴们在面试遇到CountDownLatch、CyclicBarrier、Semaphore和Exchanger工具类灵魂拷问。本章节提供一种并发流程控制的手段CountDownLatch。基本介绍CountDownLatch允许一个或多个线程等待其他线程完成操作。在.原创 2020-09-28 09:35:20 · 207 阅读 · 0 评论 -
突击并发编程JUC系列-JDK1.8 扩展类型LongAdder
突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial小伙伴们,大家好,我们又见面了,突击并发编程JUC系列实战JDK1.8 扩展类型马上就要发车了。JDK 1.8 扩展类型如下初步了解前面在讲解AtomicLong,跟大家提到过longAdder , AtomicLong通过CAS提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说它的性能已经很好了,但是JDK开发组并不满足于此。使用AtomicLong时,在高并发下大.原创 2020-09-27 14:25:48 · 312 阅读 · 0 评论 -
突击并发编程JUC系列-原子更新字段类AtomicStampedReference
突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial他来了,他来了,他带着 ABA 问题走来了,小伙伴们,大家好,我们又见面了,突击并发编程 JUC 系列实战原子更新数组类马上就要发车了。字段类型如果需要原子地更新某个类里的某个字段时,就需要使用原子更新字段类,Atomic包提供了以下3个类进行原子字段更新。小试牛刀AtomicIntegerFieldUpdater案例演示原子地更新整形字段类,还是那个懵懂少年,在修改.原创 2020-09-25 09:40:55 · 201 阅读 · 0 评论 -
突击并发编程JUC系列-原子引用AtomicReference
突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial小伙伴们,大家好,我们又见面了,突击并发编程 JUC 系列实战原子引用马上就要发车了。原子引用AtomicReference 类提供了对象引用的非阻塞原子性读写操作,对比原子更新基本类型的 AtomicInteger ,只能更新一个变量,如果要原子更新多个变量,就需要使用这个原子更新引用类型提供的类。Atomic 包提供了以下 3 个类。原子类型常用方法如下.原创 2020-09-24 12:25:40 · 307 阅读 · 0 评论 -
突击并发编程JUC系列-数组类型AtomicLongArray
突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorial上一个章节我们学习原子更新基本类型类,如果没有印象的小伙伴可以通过底部的链接回头看下,本章节主要介绍原子更新数组类型。数组类型数组类型就是通过原子的方式更新数组里的某个元素,Atomic包提供了以下4个类。AtomicLongArray 常用方法如下方法名说明long getAndIncrement(int i)以原子方式将位置i处的元素原子设置为.原创 2020-09-23 20:39:07 · 198 阅读 · 0 评论 -
突击并发编程JUC系列-原子更新AtomicLong
突击并发编程JUC系列演示代码地址:https://github.com/mtcarpenter/JavaTutorialJava 从JDK 1.5开始提供了java.util.concurrent.atomic包(以下简称Atomic包),这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。原子类通过 CAS (compare and swap) 、 volatile和native方法实现,比 synchronized 开销更小,执行效率更高,在多线程环境下,无锁的进行.原创 2020-09-22 09:58:48 · 261 阅读 · 0 评论 -
突击并发编程JUC系列-启航篇
![pexels-photo-373076.jpeg](https://img-blog.csdnimg.cn/img_convert/9c2b7b6e67689b45f4e41bb483199702.png#align=left&display=inline&height=333&margin=[object Object]&name=pexels-photo-373076.jpeg&originHeight=333&originWidth=500&原创 2020-09-21 13:12:25 · 422 阅读 · 0 评论