讨论下Java中的volatile和JMM(Java Memory Model)Java内存模型
在讨论 volatile 之前,我们需要先了解一下JMM(Java Memory Model)Java内存模型,如果没有 JMM 直接讨论 volatile 会有点奇怪,所以还是得先说下 JMM。为了保证共享内存的正确性(可见性、有序性、原子性),内存模型定义了共享内存系统中多线程程序读写操作行为的规范。
共 106 篇文章
在讨论 volatile 之前,我们需要先了解一下JMM(Java Memory Model)Java内存模型,如果没有 JMM 直接讨论 volatile 会有点奇怪,所以还是得先说下 JMM。为了保证共享内存的正确性(可见性、有序性、原子性),内存模型定义了共享内存系统中多线程程序读写操作行为的规范。
当我们要操作一个变量的时候,最经典的是自增操作,从1变成2,单线程去操作的时候肯定没问题,但是一旦出现两个线程同时去操作同一个变量的时候,问题就出现了,这与Java的内存模型JMM有关,我放在下一篇文章讨论volatile的时候去讨论,如果线程A已经把变量改为了2,线程B同时去自增操作,没有看到这个变化,还是把变量改为2,两个线程去自增结果应该是3,但结果却是2,这就引入了CAS的方式。
各位大佬应该听过很多大佬讲过AQS,到底啥是个AQS?根据名称 AbstractQueuedSynchronizer 我们可以猜到,这是一个抽象的排队同步器,每个汉字都认识,连到一起就不认识了,我们分开理解。
整个组织都可以通过API这个神秘的部门进行上传下达,它支持多种官方语言:REST API、GraphQL API,我们先介绍 REST API 方式,在开始学习之前,我们需要在极狐GitLab上申请一个Token令牌,只有正确的Token令牌才能给这个神秘的API部门下达命令。
看你这么好学,那就告诉你吧,咱天地会极狐GitLab也可以帮你审查漏洞,在Security堂口,那里都是搞安全的高手,可以帮你扫描你写的武功秘籍,其中包括静态应用程序安全测试 (SAST)、基础设施即代码 (IaC) 扫描、动态应用程序安全测试 (DAST)、依赖扫描、容器扫描等等安全扫描。
小白在极狐GitLab溜达的时候,又碰到了总舵主,赶紧拉住总舵主,上次说要教我Docker缓存优化,赶紧给我讲讲吧。舵主:好吧,你还挺好学的,你知不知道咱们极狐GitLab天地会有Package仓库,用来管理制品的?小白:当然知道啦,只是我没有使用过,这个可以怎么玩?
小白在江湖漂泊已久,听闻天下会帮主武功盖世,三分归元气(DevOps、DevSecOps、GitOps)天下无敌,一天,看到极狐GitLab天下会正在广发英雄帖招募极狐侠,加入内测堂开始修炼武功。
要说起 Optional 的诞生,需要先了解一下 NPE,很多面向对象编程语言中都会有 null 值,也就是空指针,在程序栈上指向了一个不存在的堆地址,当你使用这个指向不存在的堆地址对象时就会抛出一个 NullPointerException 异常,如果你没有很好的遇见到空指针的情况,那么你的程序将会崩溃。
本文使用的是IP2Location LITE数据库,通过读取BIN文件进行数据查询,代码参考官方案例进行精简并上传Maven仓库。
国内版 Gitlab.cn 由极狐信息技术(湖北)有限公司运营,取名为「极狐」,主打企业级 DevOps 服务,我有幸参与了SaaS平台的内测,来跟大家分享一下国内版本的极狐。