博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java多线程-(无锁)CAS算法基础
阅读量:2169 次
发布时间:2019-05-01

本文共 533 字,大约阅读时间需要 1 分钟。

通过cas算法来控制并发级别,这种无锁的实现相比阻塞等待效率要高出很多,CAS算法的过程大致如下:

CAS(V,E,N)包含这样的三个参数,V表示要更新的值,N表示新值,E表示预期值,只有当N=E时才会将值更新位N,如果N!=E则说明有其他线程更新了值,不做更新。最终会返回当前V的真实值。多线程中同时操作一个变量时,只有一个会更新成功。CAS操作之所以是线程安全的是基于CPU的cmpxchg(比较并交换操作数)指令。

下面简单介绍一下java中无锁的一些实现类基本看一看API就可以用起来了:

  • AtomicBoolean
  • AtomicInteger
  • AtomicLong
  • AtomicReference
  • AtomicStampedReference(解决ABA问题)
  • AtomicMarkableReference(解决ABA问题)
  • AtomicLongFieldUpdater
  • AtomicIntegerFieldUpdater
  • AtomicReferenceFieldUpdater(将普通的引用转换为原子引用)
  • AtomicIntegerArray
  • AtomicLongArray
  • AtomicReferenceArray(数组中每一个元素都是线程安全的)

 

 

转载地址:http://lhazb.baihongyu.com/

你可能感兴趣的文章
使聊天机器人具有个性
查看>>
使聊天机器人的对话更有营养
查看>>
一个 tflearn 情感分析小例子
查看>>
attention 机制入门
查看>>
手把手用 IntelliJ IDEA 和 SBT 创建 scala 项目
查看>>
GAN 的 keras 实现
查看>>
AI 在 marketing 上的应用
查看>>
Logistic regression 为什么用 sigmoid ?
查看>>
Logistic Regression 为什么用极大似然函数
查看>>
SVM 的核函数选择和调参
查看>>
LightGBM 如何调参
查看>>
用 TensorFlow.js 在浏览器中训练神经网络
查看>>
cs230 深度学习 Lecture 2 编程作业: Logistic Regression with a Neural Network mindset
查看>>
梯度消失问题与如何选择激活函数
查看>>
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
查看>>
为什么在优化算法中使用指数加权平均
查看>>
什么是 Q-learning
查看>>
用一个小游戏入门深度强化学习
查看>>
如何应用 BERT :Bidirectional Encoder Representations from Transformers
查看>>
5 分钟入门 Google 最强NLP模型:BERT
查看>>