多线程与高并发专栏
文章平均质量分 61
多线程高并发
小·恐·龙
这个作者很懒,什么都没留下…
展开
-
关于读写锁ReentrantReadWriteLock的使用
1.为什么要使用ReentrantReadWriteLock当我们需求是:“读锁是共享的,写锁是独占的。” juc.ReentrantLock 和 synchronized 都是独占锁,独占锁就是⼀个锁只能被⼀个线程所持有。有的时候,需要读写分离,那么就要引⼊读写锁,即 juc.ReentrantReadWriteLock。关于独占锁与共享锁的解释独占锁:指该锁⼀次只能被⼀个线程所持有。对ReentrantLock和Synchronized⽽⾔都是独占锁共享锁:指该锁可被多个线程所持有对Reenn原创 2022-03-14 10:00:19 · 437 阅读 · 0 评论 -
代码模拟自旋锁的过程
1.模拟案例多线程对资源的抢占,和人们对公共卫生间的抢占相似。为了方便理解,就模拟人们上卫生间的案例2.模拟代码/** * 自旋锁 */ //厕所类class WC { AtomicReference<Thread> atomicReference = new AtomicReference<>(); //锁门 public void lock() { Thread currentThread = Thread.current原创 2022-03-14 09:20:09 · 67 阅读 · 0 评论 -
并发异常ConcurrentModificationException出现
并发异常ConcurrentModificationException 首先要了解什么是并发异常?(从源码的角度分析查看)怎样才能产生并发异常?找出解决办法 一、什么是并发异常? 从字面意思来看: 同时发生的修改异常 Concurrent——同时发生的,并存的 Modification——修正,改正,变更 Exception—...原创 2022-03-13 22:38:43 · 314 阅读 · 0 评论 -
AtomicInteger内部的重要参数
AtomicInteger内部的重要参数Unsafe是CAS的核⼼类,由于Java⽅法⽆法直接访问底层系统,需要通过本地(native)⽅法来访问,Unsafe相当于⼀个后⾯,基于该类可以直接操作特定内存的数据。Unsafe类存在于sum.misc包中,其内部⽅法操作可以像C的指针⼀样直接操作内存,因为Java中CAS操作的执⾏依赖于Unsafe类的⽅法。注意Unsafe类中的所有⽅法都是native修饰的,也就是说Unsafe类中的⽅法都直接调⽤操作系统底层资源执⾏相应任务变量valueO原创 2022-03-12 19:30:43 · 961 阅读 · 0 评论 -
透彻分析Atomic包下的类是如何保证原子性的?
Atomic包下的类是如何保证原子性的?我们知道普通的基本类型以及包装类,在多线程情况下如果自增操作不加锁,将会出现数据不一致现象,而我们可以用java.util.concurrent.atomic包下,诸如AtomicInteger这样的原子类自增操作来解决数据不一致现象。 那他们是如何保持原子性的呢? 是通过CAS方式实现的,我们来透彻分析一下。getAndIncrement方法根据上图我们可以看出:1.getAndIncrement方法调用了unsafe的getAndAddInt方法,把当前原创 2022-03-12 17:58:53 · 1313 阅读 · 0 评论 -
ReentrantLock和synchronized的区别
Java 5为了增强内置锁的功能,引入了可重入锁(ReentrantLock)。在此以前“synchronized”和“volatile”是实现并发的方式。 Synchronized关键字使用内置锁(intrinsic lock)或者称做监视锁(monitor lock)。每个Java对象都有一个内置锁与之相关联。不管何时,当一个线程尝试去访问一个synchronized代码块或者synchronized方法的时候,线程都须要首先获取到对象关联的内置锁。对于static方法,线...原创 2022-03-11 18:15:48 · 488 阅读 · 0 评论 -
公平锁和非公平锁的区别?
点赞再看,养成习惯本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点、资料以及我的系列文章。前言上次我们提到了乐观锁和悲观锁,那我们知道锁的类型还有很多种,我们今天简单聊一下,公平锁和非公平锁两口子,以及他们在我们代码中的实践。正文开始聊之前,我先大概说一下他们两者的定义,帮大家回顾或者认识一下。公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁。优点:所有的线程都能得到资源,不会饿死在队列中。缺点:转载 2022-03-11 17:37:57 · 106 阅读 · 0 评论