ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Atomic原子类

2021-03-02 20:31:03  阅读:197  来源: 互联网

标签:int AtomicInteger 原子 线程 expect 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加锁,来提高性能

标签:int,AtomicInteger,原子,线程,expect,Atomic
来源: https://blog.csdn.net/Pomeranian/article/details/114291117

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有