Atomic原子类

1.说说什么是Atomic原子类?什么是原子性?Atomic原子类有什么作用?
2.atomic包(JUC包)下分为哪几类?
3.说说AtomicInteger怎么使用?
4.说说AtomicInteger是什么实现的?原理?
5.为什么使用Atomic原子类?


Q:说说什么是Atomic原子类?什么是原子性?Atomic原子类有什么作用?
A:
Atomic原子类是在java.concurrent.atomic包(简称JUC包)下。它是提供变量原子操作的类
操作的原子性,也叫原子操作。指的是在多个线程并发运行的时候,该操作不会被其它线程所干扰,是最小的执行单位,不可分割。

作用:不需要加锁,就可以保证变量的线程安全

Q:atomic包(JUC包)下分为哪几类?
A:
1.基本类型 2.数组类型 .3.引用类型 4.修改对象属性的类型(field updater)

基本类型中只有integer long boolean的原子操作。

Q:说说AtomicInteger怎么使用?
A:
有int getAndSet(int newValue) int getAndIncrement() int incrementAndGet()
boolean compareAndSet(int expect,int update) 等方法来实现整形的原子操作

expect是期望的值,update是要修改的值。如果现在内存中的值等于expect的话,就把update就修改好,返回true。当内存中的值不等于expect的话修改失败,返回false

剩下get在前面的话返回的是旧的值get在后面的话返回的是新的值

此时不需要对该原子整形变量加锁就可以保证线程安全

Q:说说AtomicInteger是什么实现的?原理?
A:
AtomicInteger底层是使用CAS(compare and swap) + volatile(加在那个value上) + native方法(是由c/c++实现的访问操作系统底层的方法

CAS是是怎么实现的?以及相关问题?(ABA问题什么的,打一套)
value变量加了volatile表示它对于所有线程都是可见的,所有线程都可以拿到它的最新值。
native方法:在unsafe类中可以访问操作系统底层的c/c++代码
用unsafe得到了该变量(原来的值)在内存的地址valueoffset (offset–开端,起始 也就是地址)

Q:为什么使用Atomic原子类?
A:
只需要保证变量的线程安全时,使用它来代替synchronized加锁,来提高性能

上一篇:centos7 通过shell切换root用户


下一篇:再迎巅峰!阿里爆款分布式小册开源5天Github已73K