首页>新闻>沈阳Java程序员培训班哪家师资教学水平好

沈阳Java程序员培训班哪家师资教学水平好

来源:沈阳东软睿道IT培训中心

时间:2023/3/17 14:42:02

  市面上那么多Java培训机构,小编在这里推荐沈阳东软睿道,推出的JAVA培训课程;从理论入手,让学员们成为JAVA能力者;走上职业的新篇章,详情欢迎拨打网页上方400电话或咨询在线客服哦!

  CAS原子指令相关知识

  CAS(Compare and Swap),即比较并替换,是用于实现多线程同步的原子指令,是用于实现多线程同步的原子指令。

  执行函数:CAS(V,E,N)

  其包含3个参数:

  · V表示要更新的变量

  · E表示预期值

  · N表示新值

  假定有两个操作A和B,如果从执行A的线程来看,当另一个线程执行B时,要么将B全部执行完,要么完全不执行B,那么A和B对彼此来说是原子的。

  实现原子操作可以使用锁,锁机制,满足基本的需求是没有问题的了,但是有的时候我们的需求并非这么简单,我们需要更有效,更加灵活的机制,synchronized关键字是基于阻塞的锁机制,也就是说当一个线程拥有锁的时候,访问同一资源的其它线程需要等待,直到该线程释放锁。

  CPU指令对CAS的支持

  或许我们可能会有这样的疑问,假设存在多个线程执行CAS操作并且CAS的步骤很多,有没有可能在判断V和E相同后,正要赋值时,切换了线程,更改了值。造成了数据不一致呢?答案是否定的。

  因为CAS是一种系统原语,原语属于操作系统用语范畴,是由若干条指令组成的,用于完成某个功能的一个过程,并且原语的执行必须是连续的,在执行过程中不允许被中断,也就是说CAS是一条CPU的原子指令,不会造成所谓的数据不一致问题。

  悲观锁,乐观锁

  说到CAS,不得不提到两个专业词语:悲观锁,乐观锁。我们先来看看什么是悲观锁,什么是乐观锁。

  悲观锁顾名思义,就是比较悲观的锁,总是假设较坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。

  而乐观锁反之,总是假设较好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。我们今天讲的CAS就是乐观锁。

  由于CAS操作属于乐观派,它总认为自己可以成功完成操作,当多个线程同时使用CAS操作一个变量时,只有一个会胜出,并成功更新,其余均会失败,但失败的线程并不会被挂起,仅是被告知失败,并且允许再次尝试,当然也允许失败的线程放弃操作。基于这样的原理,CAS操作即使没有锁,同样知道其他线程对共享资源操作影响,并执行相应的处理措施。同时从这点也可以看出,由于无锁操作中没有锁的存在,因此不可能出现死锁的情况,也就是说无锁操作天生免疫死锁。

  • 上一篇:沈阳线下新媒体运营培训班火热招生中
  • 下一篇:沈阳Java培训学校推荐选择哪一家靠谱些
  • 相关推荐 更多>

    沈阳本地备受欢迎的AI人工智能培...

    在沈阳AI人工智能需要学什么人工...

    沈阳精选靠谱一些的AI人工智能培...

    沈阳教学实力前几的AI人工智...

    沈阳推荐几家0基础新手也能学的A...

    沈阳AI人工智能课程培训哪个机构...

    预约体验课

    版权所有:搜学搜课(www.soxsok.com)

  • 在线咨询
  • 电话咨询
  • 预约试听

  • ;