java内存区域和内存模型是不一样的东西,内存区域是指Jvm运行时将数据分区存储,强调对内存空间的划分。而内存模型是定义了线程和主内存之间的关系,即JVM在计算内存中的工作方式,如果我们想要深入了解JAVA并发编程,就要先理解好JAVA内存模型。
多线程编程的三个重要特性:
- 原子性:多个线程对一段代码的操作是互斥的
- 可见性:一个线程对于变量做出的修改能够及时被其他线程查看到
- 有序性:除了满足happens-before原则的语句,其他的基本指令的顺序都是可以被编译器优化的
以上三个特性是实现线程安全的基础。
原子性
java中提供多种保证原子性的机制:
- CompareAndSwap(CAS)
意即比较并交换,这里使用了CPU的CAS指令保证了操作的原子性,当一个线程要改变一个变量t的值,需要向cpu提供期待的t的值x,以及调整后的值y,CAS指令会比较主内存中t的真实值和x,如果两者相等,就把y赋值给t,否则不做任何操作。
java.util.concurrent.atomic(JUC)包中提供了支持CAS操作的工具类,包括针对基本数据类型的AtomicInteger、AtomicLong等,以及针对未知对象的AtomicReference,或者是针对对象的某个变量的AtomicReferenceFieldUpdater。它们的基本思路就是在一个while循环中调用CAS,直到修改成功。
相关文章
MySQL学习-eclipse导入jar包
导包先有包 !!!一定要下载和自己MySQL版本一样的jar包!!! !!!一定要下载和自己MySQL版本一样的jar包!!! !!!一定要下载和自己MySQL版本一样的jar包!!! 如果没有包,参...
SpringMVC(2)-注解开发MVC
项目目录 一.创建maven项目,添加web支持,在pom.xml问价引入一下代码 <build> <resources> <resource> <direc...
Spring 常见面试题总结 | JavaGuide
首发于 JavaGuide 在线网站:Spring 常见面试题总结 最近在对 JavaGuide 的内容进行重构完善,同步一下最新更新,希望能够帮助你。 Spring 基础 什么是 Spring 框架...
GitStats-统计Git所有提交记录工具
如果你是研发效能组的一员或者在从事 CI/CD 或 DevOps,除了提供基础设施,指标和数据是也是一个很重要的一环,比如需要分析下某个 Git 仓库代码提交情况: 该仓库的代码谁提交的代码最多 该仓...
打工四年总结的数据库知识点
国庆节在家里很无聊。我在家里翻阅了与数据库相关的书籍,我对它上瘾了。因为我忘记了一些大学熟悉的数据库范例,我好奇地读了一点国庆节。[En]The National Day was boring at ...
mysql 8.0.28 查询语句执行顺序实测结果
TL;NRs 根据实测结果,MySQL8.0.28 中 SQL 语句的执行顺序为: (7) SELECT (5) DISTINCT (1) FROM (3) JOIN (2/4) ON (2) WHE...
Java并发编程艺术系列-四、 Java并发编程基础
四、 Java并发编程基础 本章将着重介绍Java并发编程的基础知识,从启动一个线程到线程间不同 的通信方式,最后通过简单的线程池示例以及应用(简单的Web服务器)来串联本章所介绍的内容。 4.1 线...
计算两日期相差的天数
``` 1 public static void main(String[] args) throws ParseException { 2 3 SimpleDateFormat sdf =new S...
springboot 整合 jsr-303 数据校验
数据校验 element前端自定义校验规则 :rules="dataRule" 绑定数据校验规则方法 * ```vue firstLetter: [ { validator: (rule, value...
spring 配置文件 –bean
bean标配的基本配置 id:Bean实例在Spring容器中的唯一标识 class Bean的全限定名 scope 1.当scope的取值为singleton时 Bean的实例化个数: 1个 Bea...
IDEA新建项目时的默认配置与模版配置
今天一大早,群里(点击加群)有小伙伴问了这样的一个问题: 在我们使用IDEA开发项目的时候,通常都会有很多配置项需要去设置,比如对于Java项目来说,一般就包含:JDK配置、Maven配置等。那么如果...
在web.xml配置springmvc过滤器解决乱码
代码: ``` characterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-...
Java(6)控制流程
与任何程序设计语言一样,Java使用条件语句和循环结构确定控制流程。 块作用域 我们首先要了解块(block)的概念。 块是指由若干条Java语句组成的语句,并用一对大括号括起来。块确定了变量的作用域...
Halo 开源项目学习(五):评论与点赞
基本介绍 博客系统中,用户浏览文章时可以在文章下方发表自己的观点,与博主或其他用户进行互动,也可以为喜欢的文章点赞。下面我们一起分析一下 Halo 项目中评论和点赞功能的实现过程。 发表评论 评论可以...
企业级微服务API网关Fizz-如何自定义插件
概念 fizz 插件可理解为响应式的 http servlet filter,即能拦截请求作处理,也能对响应作调整。 插件可以对路由进行操作,即所有与路由匹配的请求;或网关分组,即一组路由。[En]T...