Java学习总结(1.2.3) Java锁相关

精贴 置顶
2197 0
作者:      发布时间: 2020-03-31 00:02:37

----------原子操作封装类

AtomicBoolean:原子更新布尔类型

Atomiclnteger:原子更新整型

AtomicLong:原子更新长整型

----------数组的

Atomiclntegerarray:原子更新整型数组里的元素。

AtomicLongArray:原子更新长整型数组里的元素。

AtomicreRerenceArray:原子更新引用类型数细里的元素。

----------类内部的变量(volatile)

AtomicIntegerFieldUpdater:原子更新整型的字段的更新器。

AtomicLongFieldUpdater:原子更新长整型字段的更新器。

AtomicReferenceFeldUpdater:原子更新引用类型里的字段。

----------约定通过修改Thread抢锁

AtomicReference:原子更新引用类型。

AtomicStampedReference:原子更新帯有版本号的引用类型

AtomicMarkableReference:原子更新带有标记位的引用类型。


1.8更新

计数器增强版,高并发下性能更好

更新器: DoubleAccumulator、 LongAccumulator

计数器: DoubleAdder、 LongAdder

原理:分成多个操作单元,不同线程更新不同的单元只有需要汇总的时候才计算所有单元的操作

场景:高并发频更新、不太频緊读地读取。

数据没那么准确。



CAS的三个向题

1.循环+CAS,自旋的实现让所有线程都处于高频运行,争抢CPU执行时间的状态。如果操作长时间不成功,会带来很大的cPU资源消耗。

2.仅针对单个变量的操作,不能用于多个变量来实现原子操作。

3.ABA问题。 (比较不充分)


-------------------------------------------------------------------------

Synchronized从使用到原理

Synchronized是JVM提供

Lock是JDK提供


JAVA中锁的概念

自旋锁:是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。 (也是乐观锁)

乐观锁:假定没有冲突,在修改数据时如果发现数据和之前获取的不一致,则读最新数据,修改后重试修改

悲观锁:假定会发生并发冲突,同步所有对数据的相关操作,从读数据就开始上锁。


独享锁(写):给资源加上写锁,线程可以修改资源,其他线程不能再加锁;(单写)

共享锁(读):给资源加上读锁后只能读不能改,其他线程也只能加读锁,不能加写锁;(多读)


可重入锁、不可重入锁:线程拿到一把锁之后,可以自由进入同一把锁所同步的其他代码。

公平锁、非公平锁:争抢锁的顺序,如果是按先来后到,则为公平。



同步关键字 synchronized

1、用于实例方法、静态方法时,隐式指定锁对象

2、用于代码块时,显示指定锁对象

3、锁的作用域:对象锁、类锁、分布式锁

4、引申:如果是多个进程,怎么办?

特性:可重入、独享、悲观锁锁

优化:锁消除(开启锁消除的参数:XX:+ Doescapeanalysis-xx:+ Eliminatelocks)

        锁粗化JDK做了锁粗化的优化,但我们自己可从代码层面优化

Note: synchronized关键字,不仅实现同步,JMM中规定, synchronized要保证可见性(不能够被缓存)。






标签:

每日一句

所谓迷茫,就是才华配不上梦想:大事干不了,小事不肯干;不想做手边的事,只想做天边的事。解除迷茫,就从小事做起,从身边的事情做起,能力不是从做大事得来的,而是从这些“不起眼”的事情中锻炼来的。小事不肯干的你,大事轮不到你,趁你跌倒还能站起来的时候,先学会脚踏实地。

标签云

vue
最近综合
张雪峰留给普通人的12句话 03.30
一个孩子懦弱残酷的真相 03.26
情绪巨婴是什么 12.18
普通蛋糕做法 05.31
玉米烤肠芝士面包做法 05.31
Mysql安装教程 - 绿色版 06.18
我们学习知识为什么总是忘记呢?【学习金字塔】 05.12
Typora开发版⽆法使⽤解决⽅法 05.04
随机综合
Java学习总结(1.3.2) 并发容器类 04.07
mysql查询优化 11.13
Java学习总结(1.2.3) Java锁相关 03.31
Java学习总结(1.1.7) 线程池应用 03.19
中间件1.2.4-ActiveMQ持久化原理和事务机制 04.29
iPhone 6与iPhone 6 Plus正式开放预订 09.17
最常见最有效的隐藏外连代码_防seo黑帽隐藏外连代码 10.09
Java学习总结(1.3.3) 并发容器类2 04.09