惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News | PayPal Newsroom
P
Proofpoint News Feed
Cyberwarzone
Cyberwarzone
C
Cisco Blogs
SecWiki News
SecWiki News
Know Your Adversary
Know Your Adversary
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Vercel News
Vercel News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
NISL@THU
NISL@THU
WordPress大学
WordPress大学
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
Threat Research - Cisco Blogs
AI
AI
Simon Willison's Weblog
Simon Willison's Weblog
Security Archives - TechRepublic
Security Archives - TechRepublic
有赞技术团队
有赞技术团队
L
LINUX DO - 热门话题
Hacker News: Ask HN
Hacker News: Ask HN
V
V2EX
G
GRAHAM CLULEY
TaoSecurity Blog
TaoSecurity Blog
Hugging Face - Blog
Hugging Face - Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
F
Fortinet All Blogs
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
Latest news
Latest news
The Hacker News
The Hacker News
aimingoo的专栏
aimingoo的专栏
T
Troy Hunt's Blog
S
Schneier on Security
I
Intezer
Google DeepMind News
Google DeepMind News
A
Arctic Wolf
Apple Machine Learning Research
Apple Machine Learning Research
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threatpost
爱范儿
爱范儿
The Register - Security
The Register - Security
S
SegmentFault 最新的问题
Blog — PlanetScale
Blog — PlanetScale
博客园 - 聂微东
宝玉的分享
宝玉的分享
Recent Commits to openclaw:main
Recent Commits to openclaw:main
美团技术团队
B
Blog RSS Feed

博客园 - 外科手术医生

Spring-AI开发之旅 MACD秒解 历史的车轮 添加pdf的目录 spring ai提示词 纳瓦尔宝典-总结内容 小龙虾的skills哪里找? JMeter压测使用 Git仓库ssh不同环境配置 成功没有奇迹,只有积累----Bruce Lee 为什么要⽤ Foundry git命令下,mac环境下载依赖相关报错问题解决方案 数据分析/数据挖掘/机器学习---- 必读书目(转) 简单高效的语言 OSI模型-一图胜千言 dubbo分布式系统 JVM解剖 线程池 集合类 concurrent之volatile 架构师之路 责任链设计模式 Junit框架分析 线程详解 计划自己的时间
concurrent之CAS
外科手术医生 · 2021-10-12 · via 博客园 - 外科手术医生
你的对手在看书,你的仇人在磨刀,你的闺蜜在减肥,隔壁老王在练腰

  CAS是什么?

  比较并交换,compareAndSet,类似于版本冲突,如果主物理内存和线程中的数据是否相等,则进行交互

  实际应用的类型,AtomicInteger(原子整型),AtomicReference(自定义原子类型) 

CAS底层原理:
  比较当前工作内存中的值和主内存中的值,如果相同则执行规定操作,否则继续比较直到主内存和工作内存中的值一致为止  

  unsafe:是CAS的核心类,只能通过本地方法访问,可以直接操作特定内存数据,底层compareAndSwapInt
  变量valueOffset,表示变量值在内存中偏移地址,Unsafe就是根据内存偏移地址获取数据
  
  是一条CPU的原子指令,直接操作内存,不会造成数据不一致问题

缺点:
  极端情况,如果CAS长时间一直不成功,会给CPU带来很大的开销,使用的是do while
  只能保证一个变量的原子操作
  引出ABA问题,在当前时刻比较,这个时间差会导致数据的变化

解决ABA问题:
  添加时间戳

ReentrantLock锁线程:

  默认非公平锁,是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁在并发的情况下,有可能会造成优先级反转

  公平锁是按照申请锁的顺序来获取锁,类似排队打饭

  可重入锁

Synchronized锁对象和类

  也是非公平锁

  可重入锁

可重入锁(递归锁):

  是指同一线程外层函数获取锁之后,内层递归函数仍然能获取该锁,在内层方法自动获取锁

自旋锁

  尝试获取锁的线程,不会立即阻塞,而是采用循环的方式去尝试获取锁,避免线程的上下文切换,缺点会消耗cpu

  while (!atomicReference.compareAndSet(null, thread)) 

独占锁(可写), 共享锁(可读),互斥锁(读写锁)

ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock();
       rwLock.writeLock();
       rwLock.readLock();

CountDownlatch

  await:进行阻塞

CyclicBarrier

atomicInteger.compareAndSet(1, 100);

 atomicInteger.get();