Java线程安全与锁优化
2017-04-13 23:04
274 查看
线程安全
定义:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,则是线程安全的。实现方法:
互斥同步(阻塞同步):悲观性并发策略
通过互斥的手段(临界区、信号量、互斥量)使得在多个线程并发访问共享数据时,保证共享数据在同一时刻只被一个线程使用。
通俗讲就是通过线程阻塞和唤醒来保证同步
synchronized
非阻塞同步:乐观性并发策略
通俗讲,就是不管是否需要同步,先进行操作,如果没有其他线程争夺共享数据,则操作成功;如果有争夺,再采取措施补救。
无同步方案:
不涉及数据共享,自然不需要同步措施。
可重入代码(纯代码):可以在代码执行的任何时候中断它,去执行别的代码,之后再返回,都不会产生任何错误。
锁优化
自旋锁与自适应锁:自旋锁:通俗说,就是指需要请求锁的线程发现持有锁的线程很快就会释放锁,就直接进行一个忙循环(自旋)等待,而不进行线程的挂起和恢复(转入内核态)来浪费时间。
自适应自旋锁:在自旋锁的基础上,添加了自适应。即对同一个锁对象,自旋等待刚刚成功获取锁,虚拟机就认为这次自旋也很可能再次成功,进而允许自旋等待相对更长的时间;而如果一个锁,自旋很少成功过,则将可能直接忽略自旋过程。
锁消除:对一些代码上要求同步,但检测到不可能存在共享数据竞争的锁进行消除。
锁粗化:通俗说,是指在一个大范围内,会发生多次加锁再解锁的操作,则直接将加锁范围扩展(粗化)到最外面。
轻量级锁:
在无竞争的情况下,使用CAS操作消除同步使用的互斥量。
传统的锁机制叫“重量级”锁。
偏向锁:偏向于第一个获得它的线程
在无竞争的情况下,把整个同步都消除掉,连CAS操作都不做了。
不适用于锁总是被多个不同的线程访问的情形。
相关文章推荐
- Java线程安全杂谈——锁、状态依赖与协同以及锁优化
- 深入理解 Java 虚拟机--线程安全与锁优化
- Java线程安全杂谈——锁、状态依赖与协同以及锁优化
- [Java多线程 四]---线程安全与锁优化
- 【Java基础总结】-了解Java线程调度、并发安全及锁优化
- Java笔记--线程安全与锁优化
- Java并发:线程安全与锁优化
- 【安全牛学习笔记】 安装Java、安装显卡驱动、安装网卡补丁、并发线程限制、电源优化.txt
- 深入理解Java虚拟机JVM高级特性与最佳实践阅读总结—— 第十三章 线程安全与锁优化
- 探索深入理解java虚拟机之线程安全与锁优化(8)
- java中的线程安全与锁优化
- java线程安全和锁优化
- InfoQ: Java 6中的线程优化真的有效么?
- java线程安全总结
- java线程安全-基础知识
- Java线程安全精解[zz]
- java线程安全总结
- Java 6中的线程优化真的有效么?
- Java 6中的线程优化真的有效么?——第二部分
- java线程安全