锁机制
今天是六月 8 号,是一个电商促销的大节日,这个节日来源是京东 618 节日对于很多场景我们都很熟悉,因为我们可以遇到很多来自于节日的推送消息,
今天就接着来聊聊关于经典面试时候的一些东西,这次聊得主题就是锁
线程开始--当前获取到锁资源的这个线程
最先开始可能是无锁的状态,先判断一下
> 优先之前获取过锁资源线程-----的偏向锁
如果没有获取成功--升级成为一个 轻量级的 CAS 的乐观锁
比较并交换的一个过程,如果没有设置成功,会进行一个自旋,
多次自旋过程后,才会升级成一个 sychronized 的重量级的锁
经过这样可以保证一个锁性能的量化,保证系统数据的最合适的并发
先说一下为什么有锁这个东西?
内存中存储着我们需要的局部或者是静态变量,当多个线程进去之后进行数据交换处理,或者进行数据的操作之后,我们对于数据是未知的, 也不能保证当前线程肯定是执行了,会不会被别的线程抢走,这就导致了,我们需要加一个锁机制,将固定的区域只能允许一个线程进入,
这里我们可以对于多个线程共同或对于变量,使用 volatile 的关键字,禁止指令重排,数据可见性但是不能确定原子性,unsafe 类就可以
数据操作必须是, 对于其他线程是
安全且数据可见的(如果变更,需要通知其他线程)
原子操作,要么成功,要么失败
禁止重排序
指令重排是底层汇编,以及操作系统底层的东西基于这些对于各个语言的梳理,可以将数据整理成语句,从而将语句进行翻译成计算机可以识别的程序执行,这个操作就是指令重排
版权声明: 本文为 InfoQ 作者【卢卡多多】的原创文章。
原文链接:【http://xie.infoq.cn/article/30e41dc32d3386104767908c6】。文章转载请联系作者。
评论