多线程相关知识整理

Java43

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,直到修改成功。

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Java

MySQL学习-eclipse导入jar包

导包先有包 !!!一定要下载和自己MySQL版本一样的jar包!!! !!!一定要下载和自己MySQL版本一样的jar包!!! !!!一定要下载和自己MySQL版本一样的jar包!!! 如果没有包,参...
Java

SpringMVC(2)-注解开发MVC

项目目录 一.创建maven项目,添加web支持,在pom.xml问价引入一下代码 <build> <resources> <resource> <direc...
Java

Spring 常见面试题总结 | JavaGuide

首发于 JavaGuide 在线网站:Spring 常见面试题总结 最近在对 JavaGuide 的内容进行重构完善,同步一下最新更新,希望能够帮助你。 Spring 基础 什么是 Spring 框架...
Java

GitStats-统计Git所有提交记录工具

如果你是研发效能组的一员或者在从事 CI/CD 或 DevOps,除了提供基础设施,指标和数据是也是一个很重要的一环,比如需要分析下某个 Git 仓库代码提交情况: 该仓库的代码谁提交的代码最多 该仓...
Java

打工四年总结的数据库知识点

国庆节在家里很无聊。我在家里翻阅了与数据库相关的书籍,我对它上瘾了。因为我忘记了一些大学熟悉的数据库范例,我好奇地读了一点国庆节。[En]The National Day was boring at ...
Java

Java并发编程艺术系列-四、 Java并发编程基础

四、 Java并发编程基础 本章将着重介绍Java并发编程的基础知识,从启动一个线程到线程间不同 的通信方式,最后通过简单的线程池示例以及应用(简单的Web服务器)来串联本章所介绍的内容。 4.1 线...
Java

spring 配置文件 –bean

bean标配的基本配置 id:Bean实例在Spring容器中的唯一标识 class Bean的全限定名 scope 1.当scope的取值为singleton时 Bean的实例化个数: 1个 Bea...
Java

IDEA新建项目时的默认配置与模版配置

今天一大早,群里(点击加群)有小伙伴问了这样的一个问题: 在我们使用IDEA开发项目的时候,通常都会有很多配置项需要去设置,比如对于Java项目来说,一般就包含:JDK配置、Maven配置等。那么如果...
Java

Java(6)控制流程

与任何程序设计语言一样,Java使用条件语句和循环结构确定控制流程。 块作用域 我们首先要了解块(block)的概念。 块是指由若干条Java语句组成的语句,并用一对大括号括起来。块确定了变量的作用域...
Java

Halo 开源项目学习(五):评论与点赞

基本介绍 博客系统中,用户浏览文章时可以在文章下方发表自己的观点,与博主或其他用户进行互动,也可以为喜欢的文章点赞。下面我们一起分析一下 Halo 项目中评论和点赞功能的实现过程。 发表评论 评论可以...
Java

企业级微服务API网关Fizz-如何自定义插件

概念 fizz 插件可理解为响应式的 http servlet filter,即能拦截请求作处理,也能对响应作调整。 插件可以对路由进行操作,即所有与路由匹配的请求;或网关分组,即一组路由。[En]T...