深入理解JVM-线程安全与锁优化
按照安全程度我们将java语言中各种操作共享的数据分为5种。
- 不可变
- 绝对线程安全
- 相对线程安全
- 线程兼容
- 线程对立
线程安全的实现方法
互斥同步
非阻塞同步
锁优化
锁优化技术
- 适应性自旋
自选等待不能代替阻塞。先不说对处理器数量的要求,自旋等待本身虽然避免了线程切换的开销,但是占用处理器时间。所以如果所被占用时间很多。效果较好。如果时间很长,就会白白量费处理器资源。因此自选等待要有一定的程度。如果自选超过了限定的次数仍没有获取锁。就应该使用传统的方式去挂起线程。
- 锁消除
- 锁粗化
- 轻量级锁
- 偏向锁