Java原子类和并发工具类

1.什么是CAS机制?

他的全称是compare and swap,比较并且交换,所以他是相当于通过一个原子操作,经过读取内存,比较数据,交换数据这个三个步骤,本质上是CPU指令的支撑

2.你了解在jdk中那些地方使用到了CAS机制?

1.ConcurrentHashMap

2.Java原子类

3.自旋锁的实现

3.CAS有什么问题和缺陷?

1.ABA问题

2.只能保证单个变量的原子性,不能保证代码块的原子性

3.CAS会导致CPU利用率增加

4.什么是ABA问题?

CAS机制不是读取内存比较数据,交换数据吗,如果假如说这个数据是A,然后他变为了B,然后又变为了A,CAS他是检查不到的,但是他其实是变化了的,在某些场景可能问题不是很大,但是在有的场景中却容易出现问题。

5.怎么解决ABA问题?

给要比较的数据引入版本号,等到CAS机制进行比较的时候,就会比较版本号是否符合预期,如果当前数据的版本号和旧数据的版本号一样的话,就能比较交换,并且让版本号自增,而不一样的话就会失败。

JDK的Atomic包里提供了一个类AtomicStampedReference来解决ABA问题。

6.CountDownLatch,CyclicBarrier,Semaphore,Exchanger了解吗?

CountDownLatch,这个就是一个倒计时器,等一个或多个线程等待其他线程完成。

CyclicBarrier,他的字面意思是可循环使用的障壁,就当一组线程到达这个障壁时,就会让起发生堵塞,然后等到最后一个线程到达障壁时,这个障壁才会解放这些线程

Semaphore,他就是用来控制访问特定资源的线程数,来确保资源的分配合理性。

Exchanger,是一个线程之间协程的工具类,然后他是用来线程之间进行数据交换的,他提供一个同步点,在这个同步点时,可以进行数据交换。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值