java锁体系总结

一张图概括java 的锁体系

java锁体系总结_第1张图片
cas算法
cas意思就是比较和替换,有三个变量,主内存中的值,线程工作内存中的值(预期值),要修改的值,比较和替换是一个原子操作,每次在替换前都会比较预期值是不是和主内存中的值一致,如果一致则更新,不一致的话就从主内存中重新同步变量的值到工作内存,自旋。
cas算法弊端:
1:就是ABA的问题
当多个线程把变量的值从A改到B又改回到A,这时候cas不能识别这种状态的变化,就像银行有人把钱转出来用了一段时间又转进去,解决办法就是版本号机制,每次在更新的时候看下版本号和预期的一样不,一样就更新。
2:当并发写线程比较多的时候就会出现自旋时间很长,这个可以通过设置自旋次数或者自旋时间,当超过则线程阻塞

再说下synchronized:
从jdk1.6开始synchronized不是一上来就给加个重量级锁,而是根据情况一步步升级,从偏向锁到轻量级锁然后到重量级锁一步步进行锁升级。

你可能感兴趣的:(java锁体系总结)