1.为什么需要synchronize

我自己的理解(问题):当多个线程对同一个对象M进行操作的时候,如果是非原子性对象(比如a++这样的,要分好几个指令来走),A线程处理该对象M的时候,很可能会出现在执行完某个指令之后,因为被分配到cpu时间片段用完了,只能等待再次被分配时间片段,而这时,其他线程(线程B)对该对象进行了操作,导致对象M的值不一样了,之后由于A线程被分配到了时间片段,所以可以继续执行未处理完的指令,但是它很傻,不会在处理前看看对象M是否已经变了,而是继续按照之前拿到值进行操作。

我自己的理解(处理):两种方式 ①在对象M上加一个判断,使得线程A在处理该数据的时候,会去拿最新的值与原值进行比较,如果没有人动过,那就继续完成其它指令。

②加上一个保护,我没有完成一系列的指令前,谁都不能动,直到我完成了相关指令,其它线程才能对其进行处理。这样可以保证其原子性。

我自己的理解(具体实现):①咱们可以用CAS(compare and swap)来进行

//声明
private static AtomicInteger count=new AtomicInteger(0);
//使用 自增
cout.incrementAndGet();
//使用 自减
cout.decrementAndGet();

②可以用synchronize来实现原子性

//想要哪一快保持原子性,就把那一块用中括号括起来
synchronized(this){a++
}
//静态方法需要的是类锁,所以需要.class对象的锁
synchronized(b.class){
a++
}

当然也可以用lock来锁,这个是程序员自己整的,也能保持原子性,但是呢,要注意不能加上try语块,免得出现异常,出现了死锁

//声明一把可重入锁
private ReentrantLock lock=new ReentrantLock();
//上锁
lock.lock();
try{
a++
}finally{
//释放锁
lock.unlock;
}

synchronize原理以及和CAS的浅层比较相关推荐

  1. 浅层砂过滤器的原理是什么,滤料是什么,需要不需要定期?

    浅层砂过滤器的原理是什么,滤料是什么,需要不需要定期 浅层砂过滤器的原理是什么? 高效连续过滤器的运行可分为原水过滤和滤料清洗,再进行两个相对独立又同时进行的过程.二者在同一个过滤器的不同位置完成,前 ...

  2. 浅层砂过滤器的工作原理

    浅层砂过滤器的工作原理: 浅层砂过滤器,由若干个过滤单元并列组合而成.当系统处于过滤状态时,未经过滤的水通过布水器均匀布水,水以层流状态通过滤器内的填料层.当水流过填料层时,杂质被截留在填料层内.过滤 ...

  3. Tensorflow MNIST浅层神经网络的解释和答复

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51416540 看到之前的一篇博文:深入 ...

  4. 深度学习(二十二)Dropout浅层理解

    Dropout浅层理解 原文地址:http://blog.csdn.net/hjimce/article/details/50413257 作者:hjimce 一.相关工作 本来今天是要搞<Ma ...

  5. 温州大学《深度学习》课程课件(四、浅层神经网络)

    这学期我上的另一门课是本科生的<深度学习>,主要用的是吴恩达老师的<深度学习>视频课的内容. 本章内容见"授课计划"的标红部分 使用教材:吴恩达<深度 ...

  6. 温州大学《深度学习》课程课件(三、浅层神经网络)

    这学期我上的另一门课是本科生的<深度学习>,主要用的是吴恩达老师的<深度学习>视频课的内容. 使用教材:吴恩达<深度学习>课程笔记 课外参考书:<深度学习&g ...

  7. 深度学习(二十二)Dropout浅层理解与实现

    Dropout浅层理解与实现 原文地址:http://blog.csdn.net/hjimce/article/details/50413257 作者:hjimce 一.相关工作 本来今天是要搞< ...

  8. 工业循环水浅层砂过滤器(励进浅层介质过滤器)介绍及现场案例图

    工业循环水浅层砂过滤器(励进浅层介质过滤器)介绍及现场案例图 浅层砂过滤器(浅层介质过滤器)是由多个标准高速砂缸单元组成,其内部设有D特的布水器和集水器,拥有的双向自动冲洗阀,可实现在正常系统运行中多 ...

  9. 全自动浅层过滤器的后期维护

    全自动浅层砂过滤器概述 浅层砂过滤器,别名全自动浅层砂过滤器,系统是由多个标准高速砂缸单元组成,其内部设有布水器和集水器,拥有双向自动冲洗阀,可实现在正常系统运行中多个标准高速砂缸逐个单独的反冲洗,全 ...

  10. 深度学习入门笔记(六):浅层神经网络

    专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分 ...

最新文章

  1. HP-UX Root密码被锁定的非关机情况下解决方案
  2. Cocoapods安装过程【转载】
  3. Asp.net在线压缩和解压缩简单实现(附项目源码)
  4. 精准扶贫谋定产业化-农业大健康·万祥军:东平农业品牌化
  5. Spring+SpringMVC+MyBatis+easyUI整合基础篇(十)SVN搭建
  6. bat执行clsss
  7. 程序员撕开京东 618 大促压测的另一面 | 原力计划
  8. .NET平台常用的框架整理
  9. linux sftp 增加用户(centos)
  10. vector容器易错知识点集锦
  11. 3dmax疯狂模渲大师软件有什么使用指南?疯狂模渲大师的目录,教你怎么使用疯狂模渲大师,疯狂模渲大师其实并不难!
  12. 射击类游戏html代码,超简单射击游戏
  13. 如何制作WIFI二维码,实现手机扫一扫快速连接
  14. [大数据、Hadoop、数据采集、MySQL、计算机基础、Windows、练习题库、面试]
  15. 腾讯云点播视频存储(Web端视频上传)
  16. 影音视频领域开源项目专区
  17. ECCV2020 Flow-edge Guided Video Completion20论文翻译
  18. 树莓派连接人体感应模块HC-SR501
  19. 使用ffmpeg 合并音频视频
  20. CBOW模型详解(基于one-hot)

热门文章

  1. mysql数据库中实现内连接、左连接、右连接
  2. ERROR 1201 (HY000) Could not initialize master info structure
  3. inline-block导致的错位问题详解
  4. 前端框架Bootstrap
  5. python支持中文注释
  6. IC卡插入与触点激活时序
  7. OpenCV2计算机编程手册(二)基于类的图像处理
  8. VMware安装Linux系统
  9. 怎样当一个企业舍不得的人
  10. 双色球机器学习线性回归蓝球预测案例