当前位置: 首页 > 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…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...

uni-app学习笔记三十五--扩展组件的安装和使用

由于内置组件不能满足日常开发需要&#xff0c;uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件&#xff0c;需要安装才能使用。 一、安装扩展插件 安装方法&#xff1a; 1.访问uniapp官方文档组件部分&#xff1a;组件使用的入门教程 | uni-app官网 点击左侧…...