CAS 一些隐藏的知识,您了解吗

news2024/9/26 3:24:32

目录

ConcurrentHashMap 一定是线程安全的吗

 

      ConcurrentHashMap 在JDK1.8中ConcurrentHashMap 内部使用的是数组加链表加红黑树的结构,通过CAS+volatile或synchronized的方式来保证线程安全的,这些原理已毋庸置疑,一言不合上代码.

       模拟2个线程累计,通过ConcurrentHashMap 储存累计的结果。


/**
 * @description: ConcurrentHashMap 真的安全吗
 * @author: ppx
 * @date: 2023/8/17 14:11
 * @version: 1.0
 */
public class TestMap {

    private static ConcurrentHashMap<String, 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 LinkedBlockingQueue<Runnable>());

        for (int i = 0; i < 2; i++) {
            executor.submit(() -> {
                for (int j = 0; j < 5; j++) {
                    // 第一步读取
                    int value = concurrentHashMap.getOrDefault(key, 0);
                    // 第二步+1
                    value++;
                    // 第三补+ 回写map
                    concurrentHashMap.put(key, value);
                }
            });
        }
        executor.shutdown();
        // 直到线程执行完成
        while(!executor.isTerminated()){

        }
        System.out.println("执行结果:" + concurrentHashMap.get(key));
    }


    public static void main(String[] args) {
        testRun();
    }
}

执行多次

 

 

CAS 机制的注意事项

使用java 并行流 ,您要留意了



                

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/889749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

I/O软件层次到底是怎么分的?以及对库函数和系统调用的一些联想

其中&#xff0c;设备驱动程序和中断处理程序是直接和硬件打交道的 相关题目&#xff1a; 将系统调用参数翻译成设备操作命令的工作由&#xff08;&#xff09;完成 A. 用户层I/O&#xff1b; B. 设备无关的操作系统软件&#xff1b;C. 中断处理&#xff1b;D. 设备驱动程序 …

vue3 videojs实现播放器,动态更改src

一、背景 vue3下载第三方插件videojs&#xff0c;达到播放器的效果&#xff0c;并且点击事件能够动态更改播放器的src。实现思路&#xff1a; 场景一&#xff1a;只有一个播放器&#xff0c;当点击事件&#xff0c;直接赋值&#xff0c;动态更改封装好的组件的src参数&#xff…

【AI】如何用AI生成XMind思维导图

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff0c;物联网搬砖工一名&#xff0c;致力于为大家淘出更多好用的AI工具&#xff01; 背景 随着人工智能技术的不断发展&#xff0c;越来越多的应用场景开始涉及到AI技术。在办公软件领域&#xff0c;XMind是一款非常受欢迎…

阿里云服务区ECS,申请免费的服务器之后,如何使用xshell 登陆,找不到匹配的host key 算法

目录 1 问题2 解决 1 问题 当在阿里云免费领取服务器之后&#xff0c;使用xshell 登陆不上&#xff0c;提示 找不到匹配的host key 算法 或者 找不到匹配的keyexchange算法 咋解决 2 解决 在在服务器端配置文件&#xff1a;/etc/ssh/sshd_config # 在行尾增加",ecdh…

Linux系统编程:通过System V共享内存实现进程间通信

目录 一. 共享内存实现进程间通信的原理 二. 共享内存相关函数 2.1 共享内存的获取 shmget / ftok 2.2 共享内存与进程地址空间相关联 shmat 2.3 取消共享内存与进程地址空间的关联 shmdt 2.4 删除共享内存 shmctl 2.5 通信双方创建共享内存代码 三. 共享内存实现进程间…

基于java/springboot的考研学习平台

摘 要 本毕业设计的内容是设计并且实现一个考研学习平台。它是在Windows下&#xff0c;以MYSQL为数据库开发平台&#xff0c;Tomcat网络信息服务作为应用服务器。考研学习平台的功能已基本实现&#xff0c;主要包括学生、教师、课程信息、学习资源、课程购买、课程发货、课程…

【Spring Boot】构建RESTful服务 — 实战:实现Web API版本控制

实战&#xff1a;实现Web API版本控制 前面介绍了Spring Boot如何构建RESTful风格的Web应用接口以及使用Swagger生成API的接口文档。如果业务需求变更&#xff0c;Web API功能发生变化时应该如何处理呢&#xff1f;可以通过Web API的版本控制来处理。 1.为什么进行版本控制 …

「天锐绿盾」——企业电脑文件加密防泄密软件

随着信息技术的快速发展&#xff0c;公司的日常运营和商业机密都依赖于电脑文件。然而&#xff0c;黑客攻击、员工疏忽或物理丢失等原因都可能导致公司电脑文件泄露&#xff0c;给公司带来巨大的经济损失和声誉损失。因此&#xff0c;公司需要采取有效的措施来保护电脑文件的安…

因数据泄露被罚80万!高校数据安全合规建设如何开展?

8月16日&#xff0c;“南昌网警巡查执法”官方公号披露了一起高校数据泄露事件。 根据通报&#xff0c;南昌某高校3万余条师生个人信息数据在境外互联网上被公开售卖。南昌公安网安部门即刻开展一案双查&#xff0c;抓获犯罪嫌疑人3名&#xff0c;并对涉案高校不履行数据安全保…

游戏IP如何变身数字人?数字人绑定技术了解下

随着数字人的概念大火&#xff0c;各行各业纷纷推出专属的数字人&#xff0c;游戏《王者荣耀》作为国内最大的手游IP&#xff0c;凭借其自有资源角色IP的优势&#xff0c;推出了数字人“上官婉儿”&#xff0c;在晚会上携手真人跨次元演绎歌曲&#xff0c;在动作和舞蹈过程中由…

打造专属照片分享平台:快速上手Piwigo网页搭建

文章目录 通过cpolar分享本地电脑上有趣的照片&#xff1a;部署piwigo网页前言1.Piwigo2. 使用phpstudy网页运行3. 创建网站4. 开始安装Piwogo 总结 &#x1f340;小结&#x1f340; &#x1f389;博客主页&#xff1a;小智_x0___0x_ &#x1f389;欢迎关注&#xff1a;&#x…

性能分析之MySQL慢查询日志分析

一、背景 MySQL的慢查询日志是MySQL提供的一种日志记录,他用来记录在MySQL中响应的时间超过阈值的语句,具体指运行时间超过long_query_time(默认是10秒)值的SQL,会被记录到慢查询日志中。 慢查询日志一般用于性能分析时开启,收集慢SQL然后通过explain进行全面分析,一…

视频集中存储/云存储/安防监控/视频汇聚平台EasyCVR新增角色权限功能分配

视频集中存储/云存储/安防视频监控/视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。 EasyCVR视频集中…

解构软件开发中的破窗效应

目录 一、前言 二、解构破窗效应 三、如何解构&#xff1f; 一、前言 “一个房子如果窗户破了&#xff0c;没有人去修补&#xff0c;隔不久&#xff0c;其它的窗户也会莫名其妙地被人打破&#xff1b;一面墙&#xff0c;如果出现一些涂鸦没有被清洗掉&#xff0c;很快的&#x…

dll调用nodejs的回调函数

nodejs使用ffi调用dll。dll中有回调函数调用js中的方法。 c语言中cdll.h文件 extern "C" {typedef void(*JsCall)(int index); //这个就是要传入的类型结构extern __declspec(dllimport) int Add(int a, int b);extern __declspec(dllexport) void CallBackTest(Js…

【内网穿透】如何实现在外web浏览器远程访问jupyter notebook服务器

文章目录 前言1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook&#xff0c;它是一个交互式的数据科学和计算环境&#xff0c;支持多种编程语言&#xff0c;如…

Python系统学习1-9-类一之类语法

一、类之初印象 1、类就是空表格&#xff0c;将变量&#xff08;列名&#xff09;和函数&#xff08;行为&#xff09;结合起来 2、创建对象&#xff0c;表达具体行 3、创建类就是创建数据的模板 --操作数据时有提示 --还能再组合数据的行为 --结构更加清晰 4、类的内存分配…

为什么我建议机械专业的同学转行嵌入式

最近&#xff0c;我身边有不少机械专业找我&#xff0c;他们对未来的就业形势相当苦恼&#xff0c;觉得自己之后只能进厂打螺丝了。但是我跟他们说&#xff0c;在这个选择比努力重要的时代&#xff0c;只要入对行&#xff0c;谁都可以一飞冲天。 对于学机械的同学&#xff0c;…

mysql 8.0安装

操作系统&#xff1a;22.04.1-Ubuntu apt 安装命令 sudo apt install mysql-client-core-8.0 sudo apt install mysql-server-8.0终端输入 mysql 可以直接免密登录 如果此时提示需要密码&#xff0c;则可以进入配置文件&#xff0c;设置免密登录 sudo vim /etc/mysql/mysq…

Python爬虫性能优化:多进程协程提速实践指南

目录 1. 多进程爬虫的实现&#xff1a; 1.1 将爬虫任务划分成多个子任务&#xff1a; 1.2 创建进程池&#xff1a; 1.3 执行任务&#xff1a; 1.4 处理结果&#xff1a; 代码示例 2. 协程爬虫的实现&#xff1a; 2.1 定义异步爬虫函数&#xff1a; 2.2 创建事件循环&a…