Java线程安全与锁优化
来源:互联网 发布:淘宝9.9包邮网站 编辑:程序博客网 时间:2024/06/03 12:01
线程安全
- 定义:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,则是线程安全的。
- 实现方法:
- 互斥同步(阻塞同步):悲观性并发策略
- 通过互斥的手段(临界区、信号量、互斥量)使得在多个线程并发访问共享数据时,保证共享数据在同一时刻只被一个线程使用。
- 通俗讲就是通过线程阻塞和唤醒来保证同步
- synchronized
- 非阻塞同步:乐观性并发策略
- 通俗讲,就是不管是否需要同步,先进行操作,如果没有其他线程争夺共享数据,则操作成功;如果有争夺,再采取措施补救。
- 无同步方案:
- 不涉及数据共享,自然不需要同步措施。
- 可重入代码(纯代码):可以在代码执行的任何时候中断它,去执行别的代码,之后再返回,都不会产生任何错误。
- 互斥同步(阻塞同步):悲观性并发策略
锁优化
- 自旋锁与自适应锁:
- 自旋锁:通俗说,就是指需要请求锁的线程发现持有锁的线程很快就会释放锁,就直接进行一个忙循环(自旋)等待,而不进行线程的挂起和恢复(转入内核态)来浪费时间。
- 自适应自旋锁:在自旋锁的基础上,添加了自适应。即对同一个锁对象,自旋等待刚刚成功获取锁,虚拟机就认为这次自旋也很可能再次成功,进而允许自旋等待相对更长的时间;而如果一个锁,自旋很少成功过,则将可能直接忽略自旋过程。
- 锁消除:对一些代码上要求同步,但检测到不可能存在共享数据竞争的锁进行消除。
- 锁粗化:通俗说,是指在一个大范围内,会发生多次加锁再解锁的操作,则直接将加锁范围扩展(粗化)到最外面。
- 轻量级锁:
- 在无竞争的情况下,使用CAS操作消除同步使用的互斥量。
- 传统的锁机制叫“重量级”锁。
- 偏向锁:偏向于第一个获得它的线程
- 在无竞争的情况下,把整个同步都消除掉,连CAS操作都不做了。
- 不适用于锁总是被多个不同的线程访问的情形。
0 0
- Java笔记--线程安全与锁优化
- Java虚拟机--线程安全与锁优化
- java中的线程安全与锁优化
- Java线程安全与锁优化
- 线程安全与锁优化
- 线程安全与锁优化
- 线程安全与锁优化
- 线程安全与锁优化
- 线程安全与锁优化
- 线程安全与锁优化
- 线程安全与锁优化
- 线程安全与锁优化
- 深入理解 Java 虚拟机--线程安全与锁优化
- [Java多线程 四]---线程安全与锁优化
- [Java多线程 四]---线程安全与锁优化
- [深入理解Java虚拟机]第十三章 线程安全与锁优化-线程安全
- 线程同步安全与锁优化
- jvm(13)-线程安全与锁优化
- 稳定婚姻问题和Gale-Shapley算法
- js、jq获取当前鼠标位置
- 算法与数据结构,从入门到不放弃~
- 如何转载别人的博客
- Leetcode刷题记——50. Pow(x, n)
- Java线程安全与锁优化
- 在iOS平台上使用TensorFlow教程(上)
- 初识Windows 10 UWP Background Task
- java-类与对象 String StringBuffer
- 101 云计算基础概念
- Spring Ioc (反射) 精华一页纸
- 洗牌方法-----JS数组随机排序
- 在iOS平台上使用TensorFlow教程(下)
- jQuery实现web备忘录-3