摘要:
成员变量 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 数组默认长度 static final int MAXIMUM_CAPACITY = 1 << 30; // 数组长度最大值 static final float DEFAULT_ 阅读全文
摘要:
成员变量和构造方法 transient int size = 0; // 元素个数 transient Node<E> first; // 第一个节点 transient Node<E> last; // 最后一个节点 // 无参构造 public LinkedList() { } // 有参构造, 阅读全文
摘要:
成员变量和构造方法 private static final Object[] EMPTY_ELEMENTDATA = {}; private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; 定义了两个空数组成员变量,这两个 阅读全文
摘要:
Collection 继承关系 Map 继承关系 数组 链表 红黑树 二叉树:和链表类似,链表一个节点只有一个子节点(下一个节点),而二叉树就是可以有两个子节点,不能超过2,超过就是多叉树了 平衡二叉树:任意节点的左子树和右子树的高度之差的绝对值不超过 1 二叉搜索树:任意节点,左子树中所有节点的值 阅读全文
摘要:
是 JUC 的核心之一,AQS 的 await()、signal() 等方法底层就是 LockSuport 实现的 实现线程挂起和唤醒的操作,和每个线程关联一个许可(permit),核心方式就是 park 和 unpark,底层是 Unsafe 类的 native 方法实现 功能类似 object 阅读全文
摘要:
### 什么是 CAS + 全称是 Compare-And-Swap,对数据进行 **原子性** 操作,sun.misc.Unsafe 类的各个 native 方法实现的 + 比较当前工作内存中的值和主内存中的值,如果相同则执行规定操作,否则什么都不做或者重来一次,重来就是自旋锁了 [java各种锁 阅读全文
摘要:
### 乐观锁 悲观锁 这不是一种具体的锁,是一个广义的概念,可以认为所有的锁都是悲观或乐观的,java 中绝大部分锁都是悲观锁(synchronized、ReentrantLock等);也有乐观锁(原子类的递增、读写锁的读锁),java 的乐观锁都是 cas 实现的 **乐观锁** 顾名思义,老是 阅读全文
摘要:
可以保证多线程的 **可见性、有序性**,不能保证原子性 ### 为什么不能保证原子性 每个单独的读写操作都会及时刷新到主存中,后续操作如果失败,没有什么回滚机制(感觉理所当然,但是现在行业卷,面试时就要问你zzz) ### 怎么保证可见性的 内存屏障保证的。什么是内存屏障?就是一条特殊的 cpu 阅读全文
摘要:
### 总结 + 一个锁对象只能同时被一个线程持有,分为对象锁和类锁 - **对象锁**:每个对象都可以作为锁(几个不同的对象就是几个锁) - **类锁**:字节码对象也能作为锁(全局唯一) + 同步方法不能自定义锁,只能是默认的锁(非静态:this,静态:class);同步代码块默认的锁和方法一样 阅读全文
摘要:
> 多种方式可以完成线程同步,传统方法是关键字 synchronized 完成的,可以是同步方法也可以是同步代码块 > 还可以用juc下线程安全的阻塞队列,也可以使用 volatile+cas ### 同步方法 ```java @Data @AllArgsConstructor @NoArgsCon 阅读全文