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

seo发帖网站百度seo快速见效方法

seo发帖网站,百度seo快速见效方法,网络营销软件推广,wordpress修改404页面大家碰到了实现一个线程安全的计数器的需求改怎么做呢#xff1f;根据经验你应该知道我们要在多线程中实现共享变量的原子性和可见性问题#xff0c;于是锁成为一个不可避免的话题#xff0c;下文讨论的是与之对应的无锁CAS。为什么要无锁我们一想到在多线程下保证安全的方式…大家碰到了实现一个线程安全的计数器的需求改怎么做呢根据经验你应该知道我们要在多线程中实现共享变量的原子性和可见性问题于是锁成为一个不可避免的话题下文讨论的是与之对应的无锁CAS。为什么要无锁我们一想到在多线程下保证安全的方式肯定是锁不管从硬件、操作系统层面都或多或少在使用锁。锁有优缺点吗使用锁就需要获得锁、释放锁CPU需要通过上下文切换和调度管理来进行这个操作对于一个独占锁一个线程在持有锁后没有执行结束其他线程就必须等待等到前面的线程执行完毕CPU就会把锁拿出来给其他线程来抢了。锁的这种概念基于一种悲观机制它总是认为数据会被修改所以你在操作一部分代码块之前先加一把锁操作完成后再释放这样就安全了。什么是 CAS比较并交换(compare and swap,CAS),是原子操作的一种可用于在多线程编程中实现不被打断的数据交换操作从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致性问题。该操作通过将内存中的值与指定的数据进行比较当数值一样时将内存中的数据替换成新值。JAVA如何实现package com.concurrent.program;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.concurrent.atomic.AtomicInteger;public class Counter {private AtomicInteger atomicI new AtomicInteger(0);private int i 0;public static void main(String[] args) {final Counter cas new Counter();Listts new ArrayList(10);long start System.currentTimeMillis();for (int j0;j 100; j){Thread t new Thread(new Runnable() {Overridepublic void run() {for (int i0;i10000; i){cas.count();cas.safeCount();}}});ts.add(t);}for (Thread t : ts) {t.start();}//等待所有线程执行完成for (Thread t:ts){try {t.join();} catch (InterruptedException e){e.printStackTrace();}}System.out.println(cas.i);System.out.println(cas.atomicI.get());System.out.println(System.currentTimeMillis() - start);}/*** 使用CAS实现线程安全计数器*/private void safeCount(){for(;;){int i atomicI.get();boolean suc atomicI.compareAndSet(i, i);if (suc) {break;}}}/*** 非线程安全计数器*/private void count(){i;}}以上代码实现了一个基于CAS线程安全的计数器方法safeCount和一个非线程安全的计数器方法count读者可以自行运行运行结果如下非线程安全计数器: 971850使用CAS实现线程安全计数器: 1000000执行时间78msCAS存在的问题1.ABA问题。因为CAS需要在操作值的时候检查值有没有发生变化如果没有则更新。但是如果原来一个值是A变成了B又变成A那么使用CAS进行检查时会发现它的值没有发生变化但是实际发生了变化了。ABA解决问题的思路就是使用版本号。在变量前面追加版本号每次变量更新的时候把版本号加1那么A→B→A就会变成1A→2B→3A。从JAVA1.5开始JDK的Atomic包里提供了一个类AtomicStampedReference来解决ABA问题。2.循环时间长开销大。CAS长时间不成功会给CPU带来非常大的执行开销。如果JVM能支持处理器提供的pause指令那么效率会有一定的提示。3.只能保证一个共享变量的原子操作。对多个共享变量操作时CAS可以把多个共享变量合并成一个共享变量来操作。比如有两个共享变量i2ja合并成ij2a然后用CAS来操作ij。从JAVA1.5开始JDK的Atomic包里面提供了一个类AtomicReference类来保证引用对象之间的原子性就可以把多个变量放在一个对象里面来进行CAS操作。
http://wiki.neutronadmin.com/news/37137/

相关文章:

  • 电子商务旅游网站建设论文营销型网站建设的目的
  • wordpress 站点主页手机网站维护费
  • 公司网站字体网站托管平台
  • 重庆网站建设技术支持餐饮品牌策划设计公司
  • 深圳工程造价建设信息网站如何制作淘宝详情页图片
  • 网站建设标题全球十大软件公司排名
  • 专业的网站建设电话买一个网页需要多少钱
  • 网站建设人员春招计划沈阳哪里可以做网站营销
  • 企业门户网站开发代码新网站做seo 的效果
  • 做网站建设的公司是什么类型南和网站建设公司太原网站建设
  • 哈尔滨网站制作软件龙岩市城乡规划建设局网站
  • 十大搜索引擎神器企业整站seo
  • 绿色健康网站模板德州建设网站有
  • 手机网站主机做的网站怎么放到域名
  • 殡仪馆做网站的好处郑州网站建设招商
  • 太原云起时网站建设基于windows搭建wordpress
  • c 网站开发 readonly属性辽宁建设工程信息网官网新网站如何进入
  • 做的最好的网站公司建设营销型网站流程图
  • 怎么查询网站建设时间网站开发服务承诺书
  • 没有域名可以做网站花蝴蝶韩国免费视频
  • 沈阳网站建设tlmh上海浦东建设集团官方网站
  • 教育网站的建设代理服务器地址是什么
  • 沈阳网站制作教学网站建设应注意的问题有哪些
  • phpmysql网站开发项目式教程返利网网站怎么做
  • 织梦做分类信息系统网站新乡网站建设哪家实力强
  • 西安网站开发技术山西网站建站系统哪家好
  • 首饰网站模板江苏省建设注册中心网站首页
  • 东莞东城做网站公司重庆哪家在做网站建设
  • 网站月付服务器网络规划设计师教程(第2版) 严体华 pdf
  • 网站建设价格多少海南百度首页广告