Java 中之所以有这么多锁,根本原因就是多线程。 当多个线程同时访问共享数据时,会产生三个经典问题——原子性、可见性、有序性。锁就是为了解决这些问题而诞生的工具。 下面用生活中的例子 + 代码来分别说明为什么需要锁,以及不同的锁解决什么问题。
一.HashMap的原理 1.HashMap内部结构 HashMap底层就是一个数组,结合链表和红黑树来解决冲突。无论有没有哈希冲突,数组桶里永远只存“指向节点的引用(箭头)”,节点对象本身(包含 key、value、next)存在堆内存中。 // HashMap底层数组 Node<K,V>[] t