栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Volatile与各种JUC同步锁

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Volatile与各种JUC同步锁

Volatile保证线程可见性

--MESI

--缓存一致性协议  线程可见性在CPU级别是通过缓存一致性协议保证的

Volatile禁止指令重排序(CPU)

指令重排序在CPU级别是无法禁止的,因为是在CPU内部运行的原理。而在jvm中加上volatile关键字是可以实现禁止指令重排序的,volatile给CPU发出指令,CPU中有原语指令

loadfence(读屏障)和storefence(写屏障)的操作

 - DCL单例

 -Double Check Lock

 -Mgr06.java

Volatile不能保证原子性

CAS(无锁优化 自旋)

1.Compare And Set/Swap

2. cas(V,Expected,NewValue)V,原始值;Expected,期望当前的值是什么;NewValue,要设定的新值

 --if V ==E

   V=New

  Otherwise try again or fail

 --CPU原语支持

3.ABA问题的解决 加version 比较上一个值的version。cas(version)

AtomicInteger,AtomicLong,LongAdder。AtomicXXX->CAS

Increment->sync atomicXXX  

各种JUC同步锁

ReentrantLock vs synchronized 区别

  1. ReentrantLock需要程序手动加锁和手动解锁,sync系统自动加锁和自动解锁
  2. R有各种condition(等待队列),sync没有
  3. 底层实现:

ReentrantLock是CAS的实现,sync默认进行四种锁状态的升级

ReentrantLock 可以替代 synchronized,底层是cas vs sync,trylock,lockinterupptibly,可以在公平锁和非公平锁两者之间切换

ReentrantLock 默认false,非公平锁

公平锁概念:线程来获取资源时看queue里有没有线程在排队,如果有就要排队等着。

非公平锁:线程来获取资源时不管queue里有没有线程在排队,上来就抢锁

CountDownlatch 倒数门闩锁

CyclicBarrier 循环栅栏锁

Phaser 阶段锁

ReadWriteLock-StampedLock 读写锁的概念就是共享锁和排它锁,读锁:共享锁,写锁:排它锁

Semaphore 信号灯,使用于限流。场景,卖票,车道,收费站

公平锁与非公平锁,它默认是非公平的

Semaphore的主要方法摘要:

void acquire():从此信号量获取一个许可,在提供一个许可前一直将线程阻塞,否则线程被中断。

void release():释放一个许可,将其返回给信号量。

int availablePermits():返回此信号量中当前可用的许可数。

boolean hasQueuedThreads():查询是否有线程正在等待获取。

原文链接:https://blog.csdn.net/u013851082/article/details/70208246

Exchanger交换器, 用于线程间交换数据。Exchanger.exchange() 方法是阻塞的

LockSupport.park 停车,LockSupport.unpark开车

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/349437.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号