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

Java 并发编程学习笔记

参考资料:

JAVA并发专题 - 终有救赎的专栏 - 掘金

Java并发编程学习路线(建议收藏��) | Java程序员进阶之路x沉默王二

面试题目:

JUC第一讲:Java并发知识体系详解 + 面试题汇总(P6熟练 P7精通)-阿里云开发者社区

  • 练气篇 内存模型

第一章 CPU多级缓存模型

1.什么是CPU多级缓存模型?小陈:老王,最近学习并发不知如何入手,看的知识很零散;没多久又记不住了,你有啥好建议吗? - 掘金

  • 第二章 CPU 缓存一致性MESI

4.什么是MESI缓存一致性协议?怎么解决并发的可见性问题?MESI一致性协议 小陈:老王,上一章你让我看看MESI一致 - 掘金

  • 第三章 JMM模型

2.什么是JAVA内存模型?为什么要设计JAVA内存模型? 小陈:老王,看了上一篇的《CPU多级缓存模型》,有个疑问为什 - 掘金

第四章 JMM一致性的实现
 

1.内存可见性

2.禁止指令重排序

6.什么是内存屏障?具有什么作用?什么是内存屏障? 小陈:老王,上一篇你引出了volatile底层是通过内存屏障来解决可 - 掘金

  • 筑基篇  volatile、synchronized

第五章 内存可见性、指令重排、原子性

内存可见性

  • 指令重排

  • 原子性

3.线程安全之可见性、有序性、原子性是什么?小陈:上一篇说了JAVA内存模型,但是后面说了在多线程并发操作的时候有可见性 - 掘金

第六章 Volatile的三性实现

  1. 内存可见性

    2.指令重排

    7.volatile怎么通过内存屏障保证可见性和有序性?volatile通过内存屏障保证可见性 小陈:老王,你上一篇抛出 - 掘金

第七章 Synchronized的基本用法


1.锁加在静态对象上


2.锁加在实例对象上

3.锁在同一实例对象上才互斥,monitorenter申请锁,nonitorexit释放锁。

9.synchronized 是个啥东西?应该怎么使用?synchronized 是什么? 老王:小陈,从今天开始我们就 - 掘金

第八章 Synchronized的底层实现

  1. 对象头


2.Mark word

10.对象头、Mark Word、monitor、synchronized怎么关联起来?老王:开讲啦,开讲啦,小陈快来上 - 掘金
3.锁的升级


12.synchronized的锁重入、锁消除、锁升级原理?无锁、偏向锁、轻量级锁、自旋、重量级锁小陈:呼叫老王.... - 掘金

第九章 Synchronized的三性实现



1.内存可见性


2.指令重排


3.原子性实现

13.synchronized总结:怎么保证可见性、有序性、原子性?synchronized的原子性 通过前面的篇章我们 - 掘金

结丹篇 CAS

第十章 Unsafe类基本操作

  1. 分配和回收对外内存
  2. 直接访问内存地址上的数据
  3. CAS操作
  4. 挂起和唤醒线程
  5. 读障碍器、写障碍器、全障碍器

14.JDK底层Unsafe类是个啥东西?老王:小陈啊,从今天开始我们就要进入 《结丹篇》 了,在这一篇章里面,要注意听 - 掘金

第十一章 CAS的原子性

  1. 加偏向锁或者轻量级锁
  2. 通知总线独占

15.unsafe类的CAS是怎么保证原子性的?老王:小陈啊,上一章我们讲了usafe是个啥东西,以及unsafe提供的 - 掘金

第十二章 AtomicBoolean、AtomicInteger、AtomicLong

  1. volatile & CAS
  2. 适用于并发较轻的情况

17.AtomicInteger、AtomicBoolean的底层原理小陈:老王啊,今天就要开始Atomic原子类的学习 - 掘金

第十三章 LongAdder
1.当并发较重的情况下,while循环自旋会很浪费时间。
2.使用分段锁方式来提高并发。
19.Atomic系列之LongAdder的底层原理(分段锁提升并发性能)老王:小陈啊,上一章我们讲解了cas的缺陷,无 - 掘金

第十四章 AtomicReference、AtomicStampedReference

  1. AtomicReference解决同时需要更新多个变量的问题
  2. AtomicStampedReference解决ABA问题

18.AtomicReference、AtomicStampReference底层原理。多个变量更新怎么保证原子性?CAS的ABA问题怎么解决? - 掘金

  • 元婴篇 并发锁与框架

第十五章 AQS基础框架

AbstractQueueSynchronizer

tryLock()

tryRelease()

getState()

setState()

Enq()

addWaiter()

Park

Unpark()

Java高级面试必问:AQS 到底是什么? - 知乎

第十六章 ReentrantLock

深入理解Java并发重入锁ReentrantLock | 二哥的Java进阶之路

Volatile +CAS 实现线程互斥访问

关键字

使用方式

公平性

排队队列

性能比较

实现方式

lock

显示加锁和释放锁

非公平锁、公平锁

可在多个condition队列上等待

大部分情况下比synchronized优

Volatile+CAS

synchronized

使用关键字修饰方法、方法块

非公平锁

只能在单个队列上等待

在JDK1.6 JVM对synchronized关键字优化后,性能基本接近

Monitor

第十七章 ReadWriteLock

深入理解Java并发读写锁ReentrantReadWriteLock | 二哥的Java进阶之路

Int state,高位表示读锁数量,低位表示写锁数量。

读锁:持有读锁时,其他线程可继续获取读锁,不可获取写锁。

写锁:持有写锁时,其他线程不可获取读锁,也不可获取写锁。

锁降级

锁降级:是指在获取写锁后,再获取读锁,然后释放写锁,释放读锁。

解决问题:解决某线程写入数据后,接着读取该数据,可能不一致的问题。

第十八章 线程间的通信

Object

wait(), notify(), notifyAll()

使用案例:生产者与消费者1,不能精确通知条件

从根上理解生产者-消费者模式 | 二哥的Java进阶之路

Condition

await(), signal(), signalAll()

使用案例:生产者与消费者2,可精确通知条件里的一个线程

详解 Java Condition 的 await 和 signal 等待通知机制 | 二哥的Java进阶之路

LockSupport

park(), unpark(Thread t)

使用案例:ABC打印问题,可精准通知线程

深入理解Java并发线程阻塞唤醒类LockSupport | 二哥的Java进阶之路

第十九章 框架通信类

Semphore

Exchanger

CountDownLatch

CyclicBarrier

Java并发编程通信工具类 Semaphore、Exchanger、CountDownLatch、CyclicBarrier、Phaser等一网打尽 | 二哥的Java进阶之路

  • 化神篇 并发容器

基础容器

第二十章 CopyOnWriteArrayList

底层实现:写的时候拷贝数据到新数组,然后设置到新的数组引用。

使用场景:读多写少。

CopyOnWriteArrayList实现原理及源码分析-腾讯云开发者社区-腾讯云

第二十一章 ConcurrentLinkedList

底层实现:lock

吊打面试官之Java ConcurrentLinkedQueue | 二哥的Java进阶之路

第二十二章 ConcurrentHashMap

底层实现:1.7 segement 分段锁 1.8 CAS+synchronized

吊打Java面试官之ConcurrentHashMap(线程安全的哈希表) | 二哥的Java进阶之路

BlockingQueue

第二十三章 ArrayBlockingQueue

一把锁,两个等待队列。

第二十四章 LinkedBlockingQueue

两把锁,两个等待队列。

源码深入解析BlockingQueue | 二哥的Java进阶之路

第二十五章 PriorityBlockingQueue

小顶堆取优先级最小的出队列。

PriorityBlockingQueue详解 - 忧愁的chafry - 博客园

第二十六章 SynchronousQueue

作用:放入的线程全部等待消费线程来取(可同时多个线程),事件的及时传递。

底层:非公平通过Stack来实现,公平通过队列来实现。

源码解析Synchronous Queue 这种特立独行的队列 - 知乎

特殊容器

第二十七章 ThreadLocal

一个线程的threadLocalMap可以有多个threadLocal做weak reference key,来保持不同的对象。

ThreadLocal
set(Object value)

Get()

Remove() 不使用的时候记得显式清除。

5000字10张图讲清楚本地变量ThreadLocal | 二哥的Java进阶之路

  • 飞升篇 线程池

第二十八章 ThreadPoolExecutor

  1. 小于coreThread,新建线程;
  2. 大于coreThread, 放入等待队列;
  3. 小于maxThread,新建线程;
  4. 大于maxThread,启用拒绝策略。

newFixed   coreThread ==maxThread, LinkedBlockingQueue 队列无界容易内存溢出

newCached coreThread,Integer.MAX_VALUE, SynchronousQueue 队列无界,效率不高

24张图带你彻底弄懂 Java 线程池 | 二哥的Java进阶之路

第二十九章 ScheduledThreadPoolExecutor

fixedRate 每五分钟一次

fixedDelay 每隔五分一次

深入剖析Java定时任务ScheduledThreadPoolExecutor | 二哥的Java进阶之路

第三十章   ForkJoinPool

ForkJoinPool



深入理解Java并发编程之Fork/Join框架 | 二哥的Java进阶之路

相关文章:

Java 并发编程学习笔记

参考资料: JAVA并发专题 - 终有救赎的专栏 - 掘金 Java并发编程学习路线(建议收藏��) | Java程序员进阶之路x沉默王二 面试题目: JUC第一讲:Java并发知识体系详解 面试题汇总(P6熟练 P7精通…...

【SpringMVC】——Cookie和Session机制

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:实践 1:获取URL中的参数 (1)PathVariable 2&…...

[产品管理-60]:产品的情感化设计与常用工具:感性工学、情感分析、神经网络法、微软反应卡、突发情绪法

目录 一、概述 1、情感化设计的三个层次 2、情感化设计在产品中的应用 3、情感化设计的案例 4、情感化设计的意义 二、常见工具 1、感性工学 (情商) 2、情感分析 3、神经网络法 4、微软反应卡 5、突发情绪法 一、概述 产品的情感化设计是一种…...

uniapp 小程序 周选择器

这里贴出来的是子组件的代码&#xff0c;父组件只是打开了一下popup // 打开了一下popup $refs.popup.open(bottom)如果不想用子组件的话&#xff0c;直接打开popup就可以用<template><uni-popup ref"popup" type"bottom" background-color&quo…...

Android笔记(三十二):封装一个毫秒级别倒计时View

效果 倒计时View视频 背景 业务场景需要显示带有毫秒级别的倒计时&#xff0c;于是自己封装一个通用的倒计时组件 源码分析 核心倒计时逻辑&#xff0c;主要是每隔100毫秒计算一次从开始倒计时到现在的剩余时间&#xff0c;并通过process接口返回出去Handler每次设置100毫秒…...

[产品管理-60]:马斯洛需求层次与产品的情感化设计

目录 一、概述 1、马斯洛需求层次理论概述 2、产品情感化设计与马斯洛需求层次的关系 3、产品情感化设计的实践案例 二、马斯洛需求层次与用户情感程度&#xff08;本能、行为、反思&#xff09;的关系 1、马斯洛需求层次与用户情感程度概述 2、马斯洛需求层次与用户情感…...

Python接口自动化测试自学指南(项目实战)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 接口自动化测试是指通过编写程序来模拟用户的行为&#xff0c;对接口进行自动化测试。Python是一种流行的编程语言&#xff0c;它在接口自动化测试中得到了广…...

ESLint 使用教程(三):12个ESLint 配置项功能与使用方式详解

前言 在现代前端开发中&#xff0c;代码质量与一致性是至关重要的&#xff0c;ESLint 正是为此而生的一款强大工具&#xff0c;本文将带您详细了解 ESLint 的配置文件&#xff0c;并通过通俗易懂的方式讲解其主要配置项及其配置方法。此外&#xff0c;我们还将探讨一些高级配置…...

如何将 EDB 文件导入 Ansys HFSS 和 Ansys Q3D

EDB 文件包含有关印刷电路板 &#xff08;PCB&#xff09; 的基本数据&#xff0c;包括其布局、组件、连接性和电磁属性。将 EDB 文件导入 Ansys 工具是利用仿真和分析功能设计高效、可靠和高性能电子系统的关键步骤。在这里&#xff0c;我将向您展示如何将 EDB 文件导入 Ansys…...

HbuildderX运行到手机或模拟器的Android App基座识别不到设备 mac

寻找模拟器 背景&#xff1a; 运行的是h5&#xff0c;模拟器是网易MuMu。 首先检查一下是否配置dab环境&#xff0c;adb version 配置一下hbuilderX的adb&#xff1a; 将命令输出的路径配置到hbuilderx里面去&#xff0c;然后重启下HbuilderX。 开始安装基座…一直安装不…...

智慧流控 力行天地 | 同元软控受邀参加第十三届全国流体传动与控制学术会议

2024年10月27日-30日&#xff0c;由中国机械工程学会流体传动与控制分会主办的第十三届全国流体传动与控制学术会议在秦皇岛召开。大会以“智慧流控 力行天地”为主题&#xff0c;来自全国高校、科研院所及企事业单位的专家学者出席本次会议。 大会围绕工程应用、新型流控元件、…...

Python日志分析与故障定位

Python日志分析与故障定位 目录 &#x1f4ca; 分布式系统日志分析&#xff1a;ELK Stack与Fluentd⚡ 实时日志流处理与异常检测&#x1f40d; 使用Python分析并处理海量日志数据&#x1f6a8; 自动化故障检测与报警系统&#x1f50d; 故障根因分析&#xff08;Root Cause An…...

w029基于springboot的网上购物商城系统研发

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0…...

Uniapp全局文件执行顺序详解

Uniapp全局文件执行顺序详解 在Uni-App项目中&#xff0c;全局文件的执行顺序对于深入理解应用的启动和初始化流程至关重要。本文将详细阐述这些文件的执行顺序&#xff0c;并提供相应的示例代码&#xff0c;以便开发者更好地理解和应用。 1. index.html 文件描述&#xff1…...

车企死亡加速,买车看好这三条线

文 | AUTO芯球 作者 | 雷慢 真不是我危言耸听&#xff0c; 新能源车是真不能随便买啊&#xff0c; 就在这几天&#xff0c;哪吒被传出要裁员70%&#xff0c; 多少车主&#xff0c;多少员工和家庭要失眠了&#xff0c; 哪吒也回应了&#xff0c;说没有裁员&#xff0c;只是精…...

SpringClud一站式学习之Eureka服务治理(二)

SpringClud一站式学习之Eureka服务治理 引言1. 搭建Eureka Server1.1. 添加Eureka Server依赖1.2. 添加 Eureka Server注解1.3. 配置Eureka Server1.4. 运行Eureka Server 2. 搭建Eureka Client 服务提供者2.1. 添加依赖2.2. 添加注解2.3. 配置Eureka Client2.4. 启动服务 3. 搭…...

空间解析几何【上】

文章目录 两向量共线&三向量共面线段定比分点内积&外积&混合积内积(点积)外积(叉积)几何性质混合积轮换对称性对换改变一次符号线性性质几何性质球面方程特点空间平面参数方程行列式方程(点位式)向量式方程三点式方程行列式方程点法式一般式截距式法式方程离…...

Python 获取PDF的各种页面信息(页数、页面尺寸、旋转角度、页面方向等)

目录 安装所需库 Python获取PDF页数 Python获取PDF页面尺寸 Python获取PDF页面旋转角度 Python获取PDF页面方向 Python获取PDF页面标签 Python获取PDF页面边框信息 了解PDF页面信息对于有效处理、编辑和管理PDF文件至关重要。PDF文件通常包含多个页面&#xff0c;每个页…...

独孤思维:曾经副业赚大钱的人,怎么不见了

01 总有一双眼睛默默关注你。 别以为自己每天做项目&#xff0c;日更文章&#xff0c;没人看。 总会有人默默观察你。 看你能坚持多久&#xff0c;看多段时间&#xff0c;你是不是还在。 今天上午&#xff0c;有个2年前认识的副业同行&#xff0c;今天突然跟我发消息。 说…...

OpenGL 异常处理-glCreateShader失败

【1】glCreateShader创建顶点着色器时候报错&#xff0c;如下 【2】原因分析 初始化失败&#xff0c;你使用一个扩extension loader library来访问现代OpenGL&#xff0c;当需要初始化它时&#xff0c;加载器需要一个当前的上下文来加载 【3】解决办法 GLenum glew_err gle…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

面试高频问题

文章目录 &#x1f680; 消息队列核心技术揭秘&#xff1a;从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"&#xff1f;性能背后的秘密1.1 顺序写入与零拷贝&#xff1a;性能的双引擎1.2 分区并行&#xff1a;数据的"八车道高速公路"1.3 页缓存与批量处理…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...