一、场景引入,问题凸现

假设多个线程需要对一个变量不停地累加1:

public class HelloWorld{private int data=0;//多个线程同时对data变量执行操作:data++;
}

实际上,上面那段代码是不ok的,因为多个线程直接这样并发的对一个data变量进行修改,是线程不安全性的行为,会导致data值的变化不遵循预期的值来改变。

举个例子,比如说20个线程分别对data执行异常data++操作,我们以为最后data的值会变成20,其实不是。最后可能data的值是18,或者是19,都有可能,因为多线程并发操作下,就会有这种安全问题,导致数据结果不准确。

二、初步的解决方案:synchronized

所以,对于上面的代码,一般我们会改造一下,让它通过加锁的方式变成线程安全的:

public class HelloWorld {private int data=0;public synchronized void add(){data++;}//多个线程同时调用方法:add()
}

这个时候,代码就是线程安全的了,因为我们加了synchronized,也就是让每个线程要进入incr

Java并发包下的CAS相关的原子操作相关推荐

  1. Java并发包下的辅助工具类

    Java并发包下为我们提供了一些辅助工具类,来简单看看如何使用 一.CountDownLatch 减法器,必须等到减法器的值为0了,才能继续往下执行.也可以将它理解为栅栏 让一些线程堵塞直到另一个线程 ...

  2. juc是个什么鬼(一) Java并发包详情,CAS分析,解决ABA问题

    JUC就是java.util.concurrent包,俗称java并发包 通过看JDK的API,我们发现JUC下有俩子包,分别是atomic和locks包,这篇文章重点就是看这两个包下的内容 Atom ...

  3. java并发包下的lock接口与syschronized关键字的区别

    1.syschronized是关键字,lock是接口:syschronized是内置的,基于jvm层面的,所以发生异常时会自动释放锁:二lock是基于代码的,发生异常的时候使用unlock()释放接口 ...

  4. java 并发包 使用场景_java并发包原理及使用场景

    java并发包下有很多内置的处理线程安全问题工具类,在集合中就有2种线程同步的类,比如:Vector较ArrayList线程安全,但是效率较低,同样的还有Hashtable和HashMap,在实际项目 ...

  5. Java并发编程-无锁CAS与Unsafe类及其并发包Atomic

    [版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/72772470 出自[zejian ...

  6. 【078期】java.util.* 并发包下 LongAdder 和 AtomicLong 哪个性能更好,为什么?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方留言必回,有问必答! 每天 08:00 更新文章,每天进步一点点... 概述 ...

  7. java 线程池 包_Java并发包下线程池类小结

    并发包下的线程池技术虽然常用,但是知识点较多易忘.所以,参考网络资源做了一个小结,便于复习. 1.Executor接口 用于执行已提交的Runnable任务. Paste_Image.png 2.Ex ...

  8. 腾讯面试题Java 并发包之线程池综述

    Java 并发包之线程池综述 ■ 线程池的创建 在Java中,您可以通过调整-Xss参数来调节每个线程栈的大小(64bit系统默认1024KB),当减小该值时意味着可以创建更多的线程数,但问题是JVM ...

  9. Java并发包中常用类

    Java并发包中常用类小结(一) 从JDK1.5以后,Java为我们引入了一个并发包,用于解决实际开发中经常用到的并发问题,那我们今天就来简单看一下相关的一些常见类的使用情况. 1.Concurren ...

最新文章

  1. opencv 显示图片(直接)
  2. Spring4.X系列之Spring JDBC
  3. webqq2协议分析和qq聊天机器人简单实现(转)
  4. relativelayout中按键不能点_CNC | M80/M800系列系统常见按键和外部存储器故障
  5. python 把numpy.ndarray转为图像_Python 让蔡徐坤在我的命令行里打篮球?打得还不错...
  6. 人工智能将进入能源生产领域
  7. nexttick使用场景_使用Jest实现Vue自动化测试
  8. 《SDN期末作业——实现负载均衡》
  9. 2018-03-02 GNUtls 对 TPM1.2 的原生支持
  10. 女孩你让我留恋,你让我痴迷。
  11. 学习笔记之深入浅出MFC 第5章 Windows程序的生与死
  12. 用Python在地图上模拟疫情扩散
  13. office安装教程
  14. 《用微信测试公众号慰问你的好兄弟/姐妹》:用java简单实现微信公众号消息推送(入门且详细且有效)
  15. Visual Studio 2019 下Python的开发环境搭建
  16. 全屏播放PPT时,播放音乐
  17. 【光通信光互联电信模块详解】
  18. C语言算法题:简单密码
  19. 百度语音识别注册流程
  20. 解析大多数WordPress用户都选择托管虚拟主机的原因

热门文章

  1. IIS7.X上传文件大小受限制解决方法
  2. git push 失败出现error: src refspec master does not match any.解决方案
  3. php -- PDO异常处理
  4. 计算机顶会论文写作科研利器
  5. Linux 终端显示 Git 当前所在分支 1
  6. NVIDIA专家全面解析Merlin,GPU加速的推荐系统解决方案速速查收
  7. NLP简报(Issue#8)
  8. sql找出2000-3000年中的闰年。_跟飞哥学编程:SQL入门-4-查询和条件
  9. 蓝桥杯 基础练习 数的读法
  10. 通过apicloud实现的混合开发App的Demo