一、多线程
1.1 ConcurrentHashMap
一文彻底弄懂ConcurrentHashMap,轻松应对面试官! 这篇文章主要讲ConcurrentHashMap是HashMap的线程安全版本,具体的实现细节包括
二、锁 & 线程同步
2.1 synchronized
经历了很多优化,运行时会有三种存在方式。结论来源于文章一文彻底弄懂ConcurrentHashMap,轻松应对面试官!
- 偏向锁:这段同步代码一直被一个线程访问,那这个线程会自动获得锁,降低获取锁的代价
- 轻量级锁:偏向锁被另一个线程获取时,升级为轻量级锁。这个线程会通过自旋的方式获取锁,不会阻塞从而提高性能
- 什么是自旋锁?尝试获取锁的线程不阻塞,而是循环尝试,但是可能会消耗CPU。参考文章面试必备之深入理解自旋锁
- 重量级锁:轻量级锁自旋多次后还没获取锁,就升级为重量级锁。阻塞其他线程
2.2 volatile
多线程访问一个变量的时候,其他线程能马上看到修改的值