摘要: 首先简单说下先偏向锁、轻量级锁、重量级锁三者各自的应用场景: 偏向锁:只有一个线程进入临界区; 轻量级锁:多个线程交替进入临界区; 重量级锁:多个线程同时进入临界区。 锁膨胀过程: 上图跟下面这个解析基本相同: 偏向所锁、轻量级锁都是乐观锁,重量级锁是悲观锁。一个对象刚开始实例化的时候,没有任何线程 阅读全文
posted @ 2021-02-25 18:12 姚春辉 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 一、ArrayList的数据结构 ArrayList的底层数据结构就是一个数组,数组元素的类型为Object类型,对ArrayList的所有操作底层都是基于数组的。 二、ArrayList的线程安全性 对ArrayList进行添加元素的操作的时候是分两个步骤进行的,即第一步先在object[size 阅读全文
posted @ 2021-02-25 14:28 姚春辉 阅读(1663) 评论(0) 推荐(0) 编辑
摘要: 两者区别: 1.首先synchronized是java内置关键字,在jvm层面,Lock是个java类; 2.synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁; 3.synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放 阅读全文
posted @ 2021-02-25 14:26 姚春辉 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 1. volatile简介 在上一篇文章中我们深入理解了java关键字,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其中奥妙,我们来共同探讨下。 通过上一篇的文章我们了解到synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重 阅读全文
posted @ 2021-02-25 14:06 姚春辉 阅读(195) 评论(0) 推荐(0) 编辑