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

做网站的国标有哪些最近国际新闻大事20条

做网站的国标有哪些,最近国际新闻大事20条,网站发布和管理系统,网站点击率怎么建目录 ConcurrentHashMap 一定是线程安全的吗 CAS 机制的注意事项 使用java 并行流 #xff0c;您要留意了 ConcurrentHashMap 在JDK1.8中ConcurrentHashMap 内部使用的是数组加链表加红黑树的结构#xff0c;通过CASvolatile或synchronized的方式来保证线程安全的,这些原理…目录 ConcurrentHashMap 一定是线程安全的吗 CAS 机制的注意事项 使用java 并行流 您要留意了 ConcurrentHashMap 在JDK1.8中ConcurrentHashMap 内部使用的是数组加链表加红黑树的结构通过CASvolatile或synchronized的方式来保证线程安全的,这些原理已毋庸置疑一言不合上代码. 1.  模拟2个线程累计通过ConcurrentHashMap 储存累计的结果。 /*** description: ConcurrentHashMap 真的安全吗* author: ppx* date: 2023/8/17 14:11* version: 1.0*/ public class TestMap {private static ConcurrentHashMapString, Integer concurrentHashMap new ConcurrentHashMap();private static String key hello;/*** description: 测试2个线程 执行计算* param:* return: void* author: ppx* date: 2023/8/17 16:43*/private static void testRun() {ExecutorService executor new ThreadPoolExecutor(2, 5,2L, TimeUnit.MILLISECONDS,new LinkedBlockingQueueRunnable());for (int i 0; i 2; i) {executor.submit(() - {for (int j 0; j 5; j) {// 第一步读取int value concurrentHashMap.getOrDefault(key, 0);// 第二步1value;// 第三补 回写mapconcurrentHashMap.put(key, value);}});}executor.shutdown();// 直到线程执行完成while(!executor.isTerminated()){}System.out.println(执行结果 concurrentHashMap.get(key));}public static void main(String[] args) {testRun();} }2.出乎意料执行多次输出不同的结果 3. 分析原理ConcurrentHashMap 本身是线程安全的但for 里面的获map取值、加加操作及回写map 这三步是非原子性。要保证操作的安全性这三步实现原子性即可。 优化后代码 private static void testRun() {ExecutorService executor new ThreadPoolExecutor(2, 5,2L, TimeUnit.MILLISECONDS,new LinkedBlockingQueueRunnable());for (int i 0; i 2; i) {executor.submit(() - {for (int j 0; j 5; j) {synchronized (TestMap.class) {int value concurrentHashMap.getOrDefault(key, 0);value ;concurrentHashMap.put(key, value);}}});}executor.shutdown();while (!executor.isTerminated()) {}System.out.println(执行结果 concurrentHashMap.get(key));} CAS 机制的注意事项 某线程把数据A更新了B随后又从B更新成A恰好此时另一线程读取该数据发现数据的值还是A没有变化误认为还是原来的A但此时A的一些属性或状态已经发生过变化。 CAS操作中将判断“V的值是否仍然为A”如果是的话将执行更新操作在某些CAS操作中如果V的值首先由A变为B再由B变为A那么CAS仍然将会操作成功。 ABA问题 线程A 的操作cas中的值由1变成99再由99变成1此次线程B 发现AtomicInteger 的值还是1于是更新到50产生ABA的问题。 private static AtomicInteger atomicInteger new AtomicInteger(1);public static void main(String[] args) {Thread threadA new Thread(() - {atomicInteger.compareAndSet(1, 99);atomicInteger.compareAndSet(99, 1);System.out.println(线程A进行CAS后的值atomicInteger.get());try {Thread.sleep(2);} catch (InterruptedException e) {e.printStackTrace();}}, 线程A);Thread threadB new Thread(() - {try{atomicInteger.compareAndSet(1, 50);System.out.println(线程B进行CAS后的值atomicInteger.get());}catch (Exception e) {e.printStackTrace();}}, 线程B);threadA.start();try {threadA.join();} catch (InterruptedException e) {e.printStackTrace();}threadB.start();} 基于AtomicStampedReference类实现 AtomicStampedReference内部增加了版本号的概念只有期待的值与版本号分别匹配后才满足条件更新最新的值。 案例 线程 A  进行CAS 操作更新时发布版本已发生变动CAS更新 失败。线程B   进行CAS 操作更新时匹配对应的版本期待值更新成功。 public static void main(String[] args) {new Thread(() - {// 让线程B 获取最新版本号成功 执行更新try {Thread.sleep(11);} catch (InterruptedException e) {e.printStackTrace();}int stamp atomicStampedReference.getStamp();System.out.println(Thread.currentThread().getName() , 当前版本号为 stamp);boolean firstCasFlag atomicStampedReference.compareAndSet(100, 99, atomicStampedReference.getStamp(), atomicStampedReference.getStamp() 1);System.out.println(当前版本号atomicStampedReference.getStamp(), 线程A进行CAS后的值 atomicInteger.get() ,第1次操作是否修改成功 firstCasFlag);}, 线程A).start();new Thread(() - {try {int stamp atomicStampedReference.getStamp();System.out.println(Thread.currentThread().getName() , 版本号为 atomicStampedReference.getStamp());boolean flag atomicStampedReference.compareAndSet(100, 888, stamp, atomicStampedReference.getStamp() 1);System.out.println(线程B进行CAS后的值 atomicStampedReference.getReference() , 此次操作是否修改成功 flag);} catch (Exception e) {e.printStackTrace();}}, 线程B).start();} 执行结果 线程B, 版本号为1 线程B进行CAS后的值888, 此次操作是否修改成功 true 线程A, 当前版本号为2 当前版本号2, 线程A进行CAS后的值1,第1次操作是否修改成功 false
http://wiki.neutronadmin.com/news/379022/

相关文章:

  • 南京网站建设一条龙小程序开发框架
  • 重庆九龙坡营销型网站建设公司推荐物流好的网站模板下载
  • 内部网站建设拓扑如何做好一名销售
  • 行业网站模版安卓系统最好优化软件
  • 免费模板建站网页设计模板html代码案例
  • 东营网红餐厅安卓优化大师旧版本
  • 武进网站建设公司宝安专业网站设计公司
  • 外贸网站模板下载佛山市 骏域网站建设
  • 怎样把录的视频做一下传到网站58同城网站建设方案
  • 如何禁止ip访问网站设计广告一般用什么软件
  • 如何快速做企业网站包括商城网站效果图模板
  • 淘宝有WordPress网站搭建吗谷歌seo搜索优化
  • 企业管理系统网站怎样做网站后台运营
  • 佛山仿站定制模板建站企业网站建设怎么样做会计分录
  • 珠海网站建设培训北京智能网站建设哪里好
  • 北京最牛计算机培训机构seo优化培训多少钱
  • 洛阳网站建设的公司莆田市秀屿区建设局网站
  • 下载企业网站wordpress 用户组权限
  • 建设企业网站的公司wordpress会员通知插件
  • 旅游网站的功能装门做特卖的网站
  • 网站开发入门看什么龙岗大运做网站的公司
  • dw制作简单网站模板下载地址浙江省网站建设公司
  • 需要网站开发的吗wordpress 制作网站模板
  • 网站域没到期不能续费吗做网站用突发性实例可以吗
  • 关键字查询我的网站怎么做找建筑网官网
  • 中小企业网站设计开封北京网站建设
  • 网站尺寸大小企业网站源码搜一品资源
  • 天津和平做网站多少钱北京商场营业时间
  • 徐州企业网站设计怎么做加盟网站
  • 俄语培训网站建设沈阳网站制作的公司