Synchronized
基本认知
- 被用来解决数据共享访问的安全性问题最常见的应用
用法
不同的修饰类型,代表锁的控制粒度
- 修饰实例方法
- 作用于当前实例加锁,进入同步代码前要获得当前实例的锁
- 静态方法
- 作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁
- 修饰代码块,
- 指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。
HashMap
源码分析HashMap
是一个关联数组、哈希表,它是线程不安全的,允许key为null,value为null。遍历时无序
使用拉链法实现哈希表,结合了数组与链表的特点
其底层数据结构是数组称之为哈希桶,每个桶里面放的是链表,链表中的每个节点,就是哈希表中的每个元素;
在JDK8中,当链表长度达到8,会转化成红黑树,以提升它的查询、插入效率
而key的hash值,并不仅仅只是key对象的hashCode()
方法的返回值,还会经过扰动函数的扰动,以使hash值更加均衡。