当前位置: 首页 > news >正文

东莞市建设局质量监督网站建立免费网站的步骤

东莞市建设局质量监督网站,建立免费网站的步骤,淘淘乐网站建设,沈阳流产手术哪家比较好目录 一、CAS的简单介绍 CAS逻辑#xff08;用伪代码来描述#xff09; 二、CAS在多线程中简单的使用 三、原子类自增的代码分析 都看到这了#xff0c;点个赞再走吧#xff0c;谢谢谢谢谢 一、CAS的简单介绍 CAS的全称#xff1a;“Compare And Swap”#xff0c;字…目录 一、CAS的简单介绍 CAS逻辑用伪代码来描述 二、CAS在多线程中简单的使用 三、原子类自增的代码分析 都看到这了点个赞再走吧谢谢谢谢谢 一、CAS的简单介绍 CAS的全称“Compare And Swap”字面意思是 “比较和交换”一个CAS涉及到以下操作有两个寄存器ASwapB还有内存的值AddressC。 先判断寄存器A是否和AddressC的值相同相同SwapB的值和AddressC的值进行交换返回成功操作否则返回失败操作。这里的交换值我们也可以理解成赋值操作因为寄存器中的值我们不关心用完就丢掉了只关心内存中的值。 CAS逻辑用伪代码来描述 伪代码 这里有两个寄存器expectValueswapValue还有内存的值address初始化如图 进入if语句判断内存的值和寄存器e的值是否相等如果相等就交换寄存器swap和内存address的值如图 如图 然后返回true如果if条件不成立则返回false。 在计算机中上述操作在计算机只是一条指令因为单个指令的原因所以CAS指令是原子的。 CAS指令不涉及到加锁阻塞。基于CAS指令合理使用的话在多线程中我们可以实现无锁编程因为之前我们讨论并发编程的线程安全问题时是通过加锁阻塞这样方式解决线程安全问题因为会有阻塞所以性能也就会降低用CAS指令实现无锁编程也能保证线程安全不涉及到阻塞这样性能就能得到很大的提升在多线程编程中打开了新世界的大门。 二、CAS在多线程中简单的使用 因为CAS是CPU的指令有的cpu可能不支持CAS但主流的CPUx86arm...都是支持的。 CAS本身是CPU的指令操作系统对其做了封装jvm又对操作系统提供的api又做了一层封装。java中CAS的api是放在unsafe中的这个包名的意思顾名思义也是“不安全”的意思一般在java中不建议使用java的标准库中对于CAS进行了进一步的封装把CAS的一些操作封装成工具类供程序猿使用。而主要的一个工具叫做 “原子类”。 在 java.util.concurrent.atomic  包下里面的类就是基于上述方式实现的典型的类就是AtomicInteger类里面有很多方法可以实现数值的自增、自减以及基本的加减操作。下面的代码案例也是使用AtomicInteger展示。 我们以前写过一个代码让两个线程实现一个变量自增10_0000次如下代码是线程不安全。 public class AtomicIntegerTest1 {public static int count 0;public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() - {for (int i 0; i 50000; i) {count;}});Thread t2 new Thread(() - {for (int i 0; i 50000; i) {count;}});t1.start();t2.start();t1.join();t2.join();System.out.println(count);} } 执行结果 输出结果也和我们预期结果不同肯定是线程不安全的而原因就是因为count操作不是原子的在计算机中有三个指令。 这里我们使用CAS的方式来实现让两个线程实现一个变量自增10_0000次代码如下 public class AtomicIntegerTest1 {public static AtomicInteger count new AtomicInteger(0);public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() - {for (int i 0; i 50000; i) {count.getAndIncrement();//和count意思一样}});Thread t2 new Thread(() - {for (int i 0; i 50000; i) {count.getAndIncrement();//和count意思一样}});t1.start();t2.start();t1.join();t2.join();System.out.println(count);} } 执行结果 因为这里用CAS的方式原本count操作在计算机中有3条指令不是原子的肯定线程不安全但是用CAS的方式就可以把像count这样的操作用一条指令完成是原子的在这里就不涉及到线程安全问题了。 AtomicInteger中有很多方法自增自减-等待这里就不展开讨论了。 三、原子类自增的代码分析 代码还是上述的代码如下 public class AtomicIntegerTest1 {public static AtomicInteger count new AtomicInteger(0);public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() - {for (int i 0; i 50000; i) {count.getAndIncrement();//和count意思一样}});Thread t2 new Thread(() - {for (int i 0; i 50000; i) {count.getAndIncrement();//和count意思一样}});t1.start();t2.start();t1.join();t2.join();System.out.println(count);} } 在标准库中getAndIncrement方法是这样的 这里比较难理解我们用伪代码的形式介绍伪代码如下 当有两个线程对同一个变量进行自增操作时执行流程是这样的 这里的oldValue是寄存器中的值它的值就是AtomicInteger括号里面初始化的值value是内存中的值。从上到下把内存value的值都赋值给oldValue两个线程拿到的都是同一个内存value的值。 这时右边的线程while循环里的判断先执行CAS这里的操作如图          执行完CAS操作后返回true然后while循环里true ! ture条件不成立不执行while循环内的代码。 当左边线程进入while循环里面的判断语句时如图 也会进入CAS操作这里因为内存value的值修改了当前线程寄存器oldValue值还是0给oldValue1会返回false这时循环条件false ! true成立就会执行oldValue value操作如图 再次进入循环条件里面执行CAS操作这时候value oldValue所以会让oldvalue1赋值给value这时候value的值就是2了如图 所以两个线程不管顺序是啥样的使用getAndIncrement方法都不会出现线程安全问题因为CAS操作本身就是原子的原因的逻辑理解也大概是下面这样的 如果cas不成功会重复上面的操作再次读取数据这次读取到的数据就是正确的了cas也就能成功。意思就是这个方法里面会判断拿到的值是不是最新值如果不是就去拿最新的值再去CAS这时候因为拿到的是最新值所以这时能CAS成功。 都看到这了点个赞再走吧谢谢谢谢谢
http://www.pierceye.com/news/717956/

相关文章:

  • 黑彩网站充值就给你做单子青岛高品质网站建设
  • 网站建设是固定资产还是列费用矿泉水瓶50种手工制作
  • 兰州 网站建设凡客优品家居
  • 国内免费网站服务器推荐夸克网页版
  • 旅游型网站开发网站开发语言分析
  • 上海 网站建设平台 补贴始兴县建设局网站
  • 湘潭学校网站建设 z磐石网络桥 网站建设
  • 自建外贸网站多少钱长春新冠最新情况
  • 网站seo是啥镜像wordpress博客
  • 广州手机网站建设电子商务平台经营者对于竞价排名的商品或服务
  • 宁波网站建设联系电话查询网站页面设计服务
  • 网站建设关键词分类如何建设品牌网站
  • 常平哪里有招计算机网站开发的商业网站制作
  • 手机关键词点击排名软件长春seo排名扣费
  • 海晏县公司网站建设湖南省郴州市汝城县
  • 蒙阴做网站做网站怎么提取视频无广告
  • 整个网站都在下雪特效怎么做贵州省住房与城乡建设厅网站
  • 腾讯合作网站建设有哪些公司自己的网站做防伪码
  • 网站制作完成ks刷粉网站推广马上刷
  • 网站注册域名位置网上买一个商标多少钱
  • 网站开发 无形资产门户网站搭建方案
  • 湘西北京网站建设网站建设好发信息网
  • 淄博公司网站建设网站设计编程有哪些
  • 如何获取网站访客qq如何知道一个网站用什么建设的
  • 快站app客户管理软件多少钱
  • 山西教育学会的网站建设工作做ppt课件的网站
  • 网站开发还有哪些班级网站如何去建设
  • 学校网站框架wordpress 多个网址导航
  • 茶叶红酒网站建设关键词的优化方法
  • 做网站后台用什么语言好吴川市建设工程公司网站