202208-04 java锁升级过程过程详解 目录1.说到锁升级的过程,我们就得说一下对象头对象头对象头的存在形式接下来让我们看看锁升级的过程专业版解释我通过马士兵老师讲的带味道的栗子大致懂了这个过程(菜鸟版理解)总结1.说到锁升级的过程,我们就得说一下对象头对象头java对象保存在内存中,由3个部分组成:1.对象头2.实例数据3.对齐填充字节4.如果是数组还包含数组长度对象头的存在形式让我们先看看图,主要来说一下MarkWordmarkword8bytesclasspo... 继续阅读 >
202204-30 带你了解JAVA中的一些锁概念 目录乐观锁和悲观锁读写锁重量解锁和轻量级锁自旋锁公平锁和非公平锁可重入锁和不可重入锁死锁CAS(compareandswap)比较并交换synchronized的锁升级过程总结乐观锁和悲观锁乐观锁:这个锁认为出现锁竞争的概率比较低(当前线程中,线程数量较少,不太涉及竞争,就偶尔竞争一下)悲观锁:这个所认为出现锁竞争的概率比较大(当前场景中,线程数目比较多,可能涉及竞争)读写锁普通的锁提供两个操作:加锁,解锁读写锁提供三个操... 继续阅读 >
202109-29 Java基础之线程锁相关知识总结 一、synchronized关键字1.对象锁a.当使用对象锁的时候,注意要是相同的对象,并且当有线程正在访问对象锁内部的代码的时候,其他线程无法访问。(注意无法访问的范围)。b.但是并不影响没有使用对象锁的部分的代码的运行。对象锁分为两类一个叫做synchronized代码块(圆括号内是普通类的对象),另外一个是sybchronized修饰普通成员方法。它们二者其实可以通过this关键字进项转化。2.类锁a.当使用类锁的时候,只要是同一个类的对象.... 继续阅读 >
202109-17 深入理解Java显式锁的相关知识 目录一、显式锁二、Lock的常用api三、Lock的标准用法四、ReentrantLock(可重入锁)五、ReentrantReadWriteLock(读写锁)六、Condition一、显式锁什么是显式锁?由自己手动获取锁,然后手动释放的锁。有了synchronized(内置锁)为什么还要Lock(显示锁)?使用synchronized关键字实现了锁功能的,使用synchronized关键字将会隐式地获取锁,但是它将锁的获取和释放固化了,也就是先获取再释放。与内置加锁机制不同的是,Lo... 继续阅读 >
202108-22 Java多线程之多种锁和阻塞队列 目录一、悲观锁和乐观锁1.1.乐观锁1.2.悲观锁二、公平锁和非公平锁三、可重入锁(递归锁)四、自旋锁五、独占锁(写)/共享锁(读)六、什么是阻塞队列?七、阻塞队列(BlockingQueue)一、悲观锁和乐观锁1.1.乐观锁顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,乐观锁在Java... 继续阅读 >
202107-31 一篇文章让你彻底了解Java可重入锁和不可重入锁 可重入锁 广义上的可重入锁指的是可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并且不发生死锁(前提得是同一个对象或者class),这样的锁就叫做可重入锁。我的理解就是,某个线程已经获得某个锁,可以无需等待而再次获取锁,并且不会出现死锁(不同线程当然不能多次获得锁,需要等待)。简单的说,就是某个线程获得某个锁,之后可以不用等待而再次获取锁且不会出现死锁。常见的可重入锁Synchronized和Reent... 继续阅读 >
202107-31 程序猿必须要掌握的多线程安全问题之锁策略详解 目录一、常见的锁策略1.1乐观锁1.2悲观锁1.3读写锁1.4公平锁与非公平锁1.5自旋锁(SpinLock)1.6可重入锁1.7相关题目二、CAS问题2.1什么是CAS问题2.2CAS是怎么实现的2.3CAS有哪些应用2.3.1实现自旋锁三、ABA问题3.1什么是ABA问题3.2实现ABA问题场景四、总结一、常见的锁策略1.1乐观锁乐观锁:乐观锁假设认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正式对数据是否产生并发冲突进行... 继续阅读 >
202107-22 详解Java中的悲观锁与乐观锁 目录一、悲观锁二、乐观锁三、CAS四、AtomicXXX五、CAS中的ABA问题六、ABA问题解决方案七、使用CAS会引起的问题八、Synchronized锁优化九、偏向锁十、轻量级锁十一、重量级锁一、悲观锁悲观锁顾名思义是从悲观的角度去思考问题,解决问题。它总是会假设当前情况是最坏的情况,在每次去拿数据的时候,都会认为数据会被别人改变,因此在每次进行拿数据操作的时候都会加锁,如此一来,如果此时有别人也来拿这个数据的时候就会阻塞知道... 继续阅读 >
202107-16 Java并发编程之浅谈ReentrantLock 目录一、首先看图二、lock()跟踪源码2.1非公平锁实现2.1.1tryAcquire(arg)2.1.2acquireQueued(addWaiter(Node.EXCLUSIVE),arg)2.2公平锁实现2.2.1tryAcquire(arg)一、首先看图二、lock()跟踪源码这里对公平锁和非公平锁做了不同实现,由构造方法参数决定是否公平。publicReentrantLock(booleanfair){sync=fair?newFairSync():newNonfairSync();}2.1非公平锁实现staticfinalclassNonfairSyncextends... 继续阅读 >