阿里架构师详解:Java并发编程——内存模型

架构师变形记:讲述Java码农到年薪100万架构师之路 最近有不少朋友问我怎样才能成为年薪百万的架构师,我听到他这样问,首先想到的是什么样的人才可以称之为架构师,然后我给他总结了他需要攻克的3个难点: 1.接触不到一线实战架构设计,尤其是有一定的技术深度和难度架构设计。 2.不了解核心技术点所处的具体背景是什么?其后的设计方案是什么?   3.为什么要如此设计?在设计方案时有没有不同的方案对比?架构设计背后的哲学有哪些? 而对于有一定后台研发... 阅读详情

一、并发编程基础概念

并发——在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行——源自百度百科

在并发编程中,我们需要处理两个关键问题:线程之间如何通信和线程之间如何同步,后续篇章将围绕这两个问题进行介绍。

  • 线程通信:是指线程之间以何种机制来交换信息,在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。
  • 线程同步:是指程序用于控制不同线程之间操作发生相对顺序的机制。在Java中,可以通过volatile,synchronized, 锁等方式实现同步。

本文主要介绍java的通信机制,刚介绍常见通信机制主要包括以下两种方式:

  • 共享内存:线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。
  • 消息传递:线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信。Java的并发采用的是共享内存模型,Java线程之间的通信总是隐式进行,整个通信过程对程序员完全透明。在java中,所有实例域、静态域和数组元素存储在堆内存中,堆内存在线程之间共享。

Java线程之间的通信由Java内存模型(本文简称为JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。

二、JMM内存模型

JMM(Java Memory Model)是JVM规范中定义的一种Java内存模型,它的目的是屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台上到能达到一致的内存访问效果。

Java内存模型的主要定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样底层细节。首先简单说明几个常用名称定义:变量:这里指包括了实例字段、静态字段和构成数组对象的元素,但是不包括局部变量与方法参数,后者是线程私有的,不会被共享。

  • 主内存:在java中,实例域、静态域和数组元素是线程之间共享的数据,它们存储在主内存中。
  • 工作内存:每条线程都有自己的工作内存,线程的工作内存中保存了该线程使用到的变量到主内存副本拷贝,线程对变量的所有操作(读取、赋值)都必须在工作内存中进行,而不能直接读写主内存中的变量。

线程、主内存和工作内存之间交互关系

线程、主内存和工作内存的交互关系如上图所示,和CPU-缓存-内存很类似。

不同线程之间无法直接访问对方工作内存中的变量,线程间变量值的传递均需要在主内存来完成。

最后注意,为了获得较好的执行性能,Java内存模型并没有限制执行引擎使用处理器的寄存器或者高速缓存来提升指令执行速度,也没有限制编译器对指令进行重排序。也就是说,在java内存模型中,也会存在缓存一致性问题和指令重排序的问题。

三、内存间交互操作

关于主内存与工作内存之间的具体交互协议,即一个变量如何从主内存拷贝到工作内存、如何从工作内存同步到主内存之间的实现细节,Java内存模型定义了以下八种操作来完成:

  • lock(锁定):作用于主内存的变量,把一个变量标识为一条线程独占状态。
  • unlock(解锁):作用于主内存变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定。
  • read(读取):作用于主内存变量,把一个变量值从主内存传输到线程的工作内存中,以便随后的load动作使用。
  • load(载入):作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中。
  • use(使用):作用于工作内存的变量,把工作内存中的一个变量值传递给执行引擎,每当虚拟机遇到一个需要使用变量的值的字节码指令时将会执行这个操作。
  • assign(赋值):作用于工作内存的变量,它把一个从执行引擎接收到的值赋值给工作内存的变量,每当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作。
  • store(存储):作用于工作内存的变量,把工作内存中的一个变量的值传送到主内存中,以便随后的write的操作。
  • write(写入):作用于主内存的变量,它把store操作从工作内存中一个变量的值传送到主内存的变量中。

所以变量读写包含以下几个步骤:

  • 变量从主内存复制到工作内存——顺序执行read和load操作
  • 变量从工作内存同步到主内存——顺序执行store和write操作

注意,Java内存模型只要求上述操作必须按顺序执行,而没有保证必须是连续执行。也就是read和load之间,store和write之间是可以插入其他指令的。

除了定义以上8中原子操作,Java内存模型还规定了上述8种基本操作在执行时必须满足一定的操作规则,例如如不允许read和load单独出现(即不允许一个变量从主内存中读取但工作内存不接受),不允许store和write单独出现(即不允许从工作内存中发起了回写单主内存不接受),这里不一一列举,详细网上搜索即可。

Java内存模型还定义了volatile型变量的特殊规则(下一节介绍),以上三种规定共同确定了Java中哪些内存访问操作是安全的即:

8种原子操作+操作规则+volatile规定=Java中哪些内存访问操作是安全的

四、volatile型变量规定

当一个变量被定义为volatile后,将具备两种特性:

  • 特性一:保证此变量对所有线程的可见性
  • 特性二:禁止指令重排序优化

4.1 volatile可见性

可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

普通的共享变量不能保证可见性,因为普通共享变量被修改之后,什么时候被写入主存是不确定的,当其他线程去读取时,此时内存中可能还是原来的旧值,因此无法保证可见性。

但是,需要注意的是volatile变量只保证可见性,但是java里面的运算并非全部都是原子操作例如++操作,这样同样导致volatile修饰变量java运算不安全。

一般不符合以下两条规则的运算场景中,我们需要通过加锁(synchronized或并发包中的锁)保证变量原子性:

运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值(比如++操作不符合依赖当前值)

变量不需要与其他状态变量共同参与不变约束

常见的volatile修饰变量的场景是用来作为开关控制并发:

volatile开关

4.2 禁止指令重排序

重排序:是指“编译器和处理器”为了提高性能,而在程序执行时会对程序进行的重排序。大致可以分为以下三类:

  • 编译器优化指令重排
  • 不改变单线程语义的情况下
  • 重新安排指令执行的顺序

指令级并行重排序,该优化主要是为了让程序发挥现代处理器的指令级并行执行能力,前提是这些语句不存在数据依赖。

内存系统重排序,主要发生在处理器读写缓冲区,读写过程看起来是无序的,但最终结果是有序的

从Java源代码到最终实际执行的指令序列,会经过下面三种重排序:

实际执行指令序列

以上重排序可能会导致多线程中出现内存可见性问题,针对编译器重排序JMM的编译器重排序规则会禁止特定类型的编译器重排序。

而对于后两种重排序,JMM的处理器重排序规则会要求java编译器在生成指令序列时,插入特定类型的内存屏障(memory barriers,intel称之为memory fence)指令,通过内存屏障指令来禁止特定类型的处理器重排序(不是所有的处理器重排序都要禁止)。

下面我们看下jvm如何实现volatile禁止指令重排序的:

volatile变量写操作,jvm会向处理器发送一条Lock前缀命令,将变量所在的缓存行系会到系统内存。其他处理器通过嗅探总线上传播的数据检测自己的数据是否过期,如果发现过期会置为无效,再次使用时会从系统内存获取

Lock前缀命令禁止该指令与之前和之后的读和写指令重排序。

最后,关于volatile禁止重排序几点使用说明:

  • 不会对volatile读与volatile读后面的任意内存操作重排序
  • 不会对volatile写与volatile写之前的任意内存操作重排序

CAS同时具有volatile读和写内存的语义,java的CAS使用现代处理器提供的高效级别的原子指令,这些原子指令以原子方式对内存执行读-改-写操作,这是多处理器中实现同步的关键。

五、JMM内存模型总结

总的来说JMM内存模型是围绕着在并发过程中如何处理原子性、可见性和有序性三个特征来建立的。下面就三个特征分别说明:

5.1 原子性

原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。

java内存模型的read、load、assign、use、store和write六个操作直接保证原子性,我们可以任务基本数据类型访问读写是具有原子性(特殊说明long double64位操作根据jvm实现有关)。

如果场景中需要大范围的原子性保证,java内存模型提供了lock和unlock操作来满足,对应到java代码关键字即是——synchronized。

5.2 可见性

可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

除了上面介绍的volatile外,java还提供了两个关键字实现可见性,synchronized和final。final的可见性:是指被final修饰的字段在构造器中一旦完成,那么在其他线程就可以看见final字段值synchronized可见性:是指对一个变量执行unlock操作之前,必须先把次变量同步会主内存这条操作规则限制

5.3 有序性

有序性:即程序执行的顺序按照代码的先后顺序执行。

java中天然有序性可以总结为一句话:如果在本线程内观察,所有的操作都是有序的;如果在一个线程中观察另外一个线程,所有操作都是无序的。前半句是指“线程内表现为串行语义”,后半句表示“指令重排”和“工作内存与主内存同步延迟”现象。

java提供了volatile和synchronized两个关键字来保证线程之间操作的有序性,这里synchronized则是有“同一时刻只允许一条线程对其进行lock操作”这条操作规定获取的,这个规则决定了同一个锁的两个同步块只能串行进入。

最后,可以发现synchronized关键字可以同时解决上述三个问题,当然这个需要付出代价就是性能问题。

Java_supermanNO1:专注于Java开发技术的研究与知识分享!

————END————

  • 点赞(编辑不易,感谢您的支持)

  • …

  • 转发(分享知识,传播快乐)

  • …

  • 关注(每天更新Java开发技术)

  • …

每天一个优秀提示词学习收藏 - 文本去AI化(四) 宝子们,今天不藏私啦!我把这段时间四处搜罗、潜心钻研出来的文本去AI化Prompt 提示词大礼包双手奉上,这可都是能让你的 AI 创作水平原地起飞的干货!走过路过不要错过,赶紧码住,开启你的 AI 创作进阶之旅吧! 阅读详情

相关推荐

QT+SOEM主站协议库实战指南—从编译到嵌入式应用

本文提供了一份QT与SOEM开源EtherCAT主站协议库的集成实战指南。详细介绍了在Windows和Linux平台下编译SOEM库的步骤,并讲解了如何将其无缝集成到QT项目中,构建具备实时监控与控制功能的工业上位机应用。内容涵盖从环境搭建、核心协议开发到嵌入式部署与优化的全流程,为开发高性价比、自主可控的工业控制解决方案提供完整路径。

u6v7w8x的博客 439

java规则引擎_阿里架构师详解:Java并发编程——内存模型

一、并发编程基础概念并发——在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行——源自百度百科在并发编程中,我们需要处理两个关键问题:线程之间如何通信和线程之间如何同步,后续篇章将围绕这两个问题进行介绍。线程通信:是指线程之间以何种机制来交换信息,在命令式编程中,线程之间的通信机制有两种:共享内存...

weixin_39869693的博客 229

7-15 估值一亿的AI核心代码

函数封装,含一个字符串中的所有的某个字串全部替换成另一个的函数,还有判断是否独立的函数以上图片来自新浪微博。!

weixin_73529240的博客 601

java中如何表示一条鱼得到的能量_阿里架构师详解:Java并发编程——内存模型...

一、并发编程基础概念并发——在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行——源自百度百科在并发编程中,我们需要处理两个关键问题:线程之间如何通信和线程之间如何同步,后续篇章将围绕这两个问题进行介绍。线程通信:是指线程之间以何种机制来交换信息,在命令式编程中,线程之间的通信机制有两种:共享内存...

weixin_39625008的博客 151

云漾AI创作平台实战:如何用GPT4.0+Midjourney快速生成商业级插画(附Prompt模板)

本文详细介绍了如何利用云漾AI创作平台结合GPT4.0和Midjourney快速生成商业级插画。通过智能文案生成与视觉化工作流,大幅提升创作效率,适用于电商、社交媒体等多种场景。文章包含实用Prompt模板和参数调整技巧,帮助设计师和内容创作者高效产出专业插画。

weixin_29251567的博客 219

电化学阻抗谱(EIS)在锂离子电池中的应用

摘要电化学阻抗谱(electrochemical impedance spectroscopy, EIS)是一种重要的电化学测试方法,在锂离子电池动力学反应机理研究及动力学参数测量等方面具有广泛的应用。在锂离子电池运行过程中,各反应步骤的动力学参数及时间常数不同,而EIS可以在较宽的频率范围内对体系施加小幅正弦激励信号,使得在特定频率下突出特定时间常数的电极过程,从而将复杂的电极过程分离,实现单一电极过程动力学的分析。通过对交流阻抗信息的研究,也可以为锂离子电池及其他电池的应用与管理、电化学过程设计及电极材

qiushireader的博客 2651

出道即成神,阿里巴巴架构师耗时10多年总结而成:java并发编程宝典

前言 大家都知道并发编程技术就是在同一个处理器上同时的去处理多个任务,充分的利用到处理器的每个核心,最大化的发挥处理器的峰值性能,这样就可以避免我们因为性能而产生的一些问题。 大厂的核心负载肯定是非常高的,就像阿里巴巴每年都要进行的“双十一狂欢节”,这么大的流量负载,并发编程技术在其中就是起到非常大的作用的,归纳一下就是“性能调优”。 今天给大家分享的“Java并发编程宝典”是阿里技术专家/该领域的领军人物们所撰写的,可以说是有着绝对性的话语权的。 熬夜啃完,受益匪浅!感受到了并发编...

m0_50180963的博客 169

手把手教你用RMII接口配置以太网PHY芯片(附YT8512实战代码)

本文详细介绍了如何使用RMII接口配置以太网PHY芯片,以国产YT8512为例,提供从硬件设计到软件驱动的全流程实战指南。内容包括RMII接口技术解析、YT8512硬件设计要点、驱动开发实战代码及常见问题排查,帮助开发者快速实现以太网通信功能。

mac99的博客 996

阿里P8架构师详谈 Java 内存模型

Java 内存模型(JMM)描述了 JVM 如何使用计算机的内存(RAM)。JVM 是一个完整计算机的模型,因此该模型包含了内存模型的设计 —— JMM。 如果要正确地设计并发程序,了解 JMM 非常重要。JMM 描述了不同线程间如何以及何时可以看到其它线程写入共享变量的值,以及如何在必要时同步访问共享变量。 最初的 JMM 设计不充分,因此 JMM 在 Java 1.5 进行了修订...

qq_39662660的博客 2万+

ABAP CDS HAVING 全解析:聚合之后的精准过滤、最佳实践与可运行示例

摘要: 本文针对具备ABAP与CDS基础的开发者,详解HAVING在ABAP CDS中的核心用法。HAVING专用于过滤GROUP BY后的聚合结果(如SUM、COUNT),与WHERE的分工明确:前者处理聚合值,后者过滤原始记录。通过销售额阈值、质量分析、财务对账三类典型场景,结合性能优化建议(如优先使用WHERE索引过滤),说明实际应用。文中提供经典CDS View与View Entity两种实现代码,并附Open SQL消费示例,帮助开发者快速落地。常见误区(如聚合条件误写至WHERE)与规避方法亦被

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 221

玩转企业微信群机器人:一份超详细的Webhook消息推送指南

企业微信群机器人是一个连接内部协作与外部服务的强大桥梁。通过灵活运用本文介绍的各种消息类型,你可以构建出丰富多彩、信息明确的自动化通知系统,极大地提升团队沟通效率。现在,就动手试试,将你的第一个机器人集成到工作流中吧!如果你有任何有趣的机器人应用场景或遇到了问题,欢迎在评论区留言交流!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3977

Java 并发编程的艺术

内容简介 书中采用循序渐进的讲解方式,从并发编程的底层实现机制入手,逐步介绍了在设计 Java 并发程序时各种重要的技术、设计模式与应用,同时辅以丰富的示例代码,使得开发人员能够更快地领悟 Java 并发编程的要领,围绕着 Java 平台的基础并发功能快速地构建大规模的并发应用程序。 第1章介绍 Java 并发编程的挑战,会向读者说明可能会遇到哪些问题,以及如何解决。 第2章 Java 并发编程...

GitChat 2693

101、LLC谐振变换器的传递函数推导

文章摘要 LLC谐振变换器的传递函数推导是电源设计的关键环节。作者通过一次炸管事故案例,揭示了忽视传递函数计算的严重后果。LLC传递函数复杂的根源在于其三个谐振元件(Lr、Cr、Lm)的变频工作特性,导致增益曲线非单调变化。文章详细介绍了采用扩展描述函数法的建模思路,指出Lm对增益曲线的重要影响,并给出了传递函数的数学表达式及频率响应特性。通过实际调试案例,作者对比了错误补偿器设计(Type II)与优化方案(Type III)的效果差异,强调了实测验证的重要性。最后总结了5条实用经验,包括留足裕度、关注启

Jack010169的博客 152

Java并发编程的艺术下载

本书简介 并发编程领域的扛鼎之作,作者是阿里和1号店的资深Java技术专家,对并发编程有非常深入的研究,《Java并发编程的艺术》是他们多年一线开发经验的结晶。本书的部分内容在出版早期发表在Java并发编程网和InfoQ等技术社区,得到了非常高的评价。它选取了Java并发编程中最核心的技术进行讲解,从JDK源码、JVM、CPU等多角度全面剖析和讲解了Java并发编程的框架、工具、原理和方法,对Java并发编程进行了最为深入和透彻的阐述。 《Java并发编程的艺术》内容涵盖Java并发编程机制的底层实现原理.

R先生专栏 1328

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

华为与阿里等五位架构师一起奋战七个月,写出这一份Java并发编程

作者介绍: 本书由五位作者(均为RedSpider社区成员)共同撰写。他们均参与了初稿编写、文章修订等工作。 灵鹤:Naver China Java工程师,拥有国外大型企业高并发项目经验,熟悉敏捷流程开发及持续集成,热爱开源,喜欢分享,对于写作始终保持严谨的态度。 毛毛虫:Java开发工程师,专注Java技术体系,熟悉微服务及大数据领域。拥有大数据项目开发经验和运维经验、丰富的企业级项目开发经验。热爱开源,乐于分享。目前专注于微服务,JVM,大数据生态系统。 潘帕斯雄鹰:Java开发工程师,长期位于

Java0258的博客 239

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java并发编程的艺术

回复并发编程的艺术即可获取《Java并发编程的艺术》正是为了解决这个问题而写的。书中采用循序渐进的讲解方式,从并发编程的底层实现机制入手,逐步介绍了在设计Java并发程序...

田维常 531

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

阿里技术专家开发总结:剖析并发编程+JVM性能,深入Tomcat与MySQL

每一个程序员都有自己清晰的职业规划和终极目标,无论之后是继续钻研技术,还是转管理岗、产品岗,都是需要自己具备有一定的实力,换句话说技术要牛逼。架构师,是很多程序员的终极目标,而成为一名Java架构师,那就需要对自己自身有一定要求,不仅技术能力要过硬,还需要有组织能力和提出解决方案的能力。那么作为架构师,需要掌握哪些技术呢? 今天,就由一线大厂架构师来总结总结他的开发十年,带你剖析并发编程与JVM,深入Tomcat和MySQL,离架构师更近一步! 注意:以下内容并非完整版,包括一些详细解析和PDF都整理打

文章中资料均可获取,有需要请添加yunduoa2019即可 238

阿里架构师:如何成为一个年薪 40 万以上的Java程序员?

不想当将军的兵不是好兵,就程序猿不想当架构师就不是好的程序员! Java架构师主要需要做哪些工作呢? 1、负责设计和搭建软件系统架构(平台、数据库、接口和应用架构等),解决开发中各种系统架构问题。 2、优化现有系统的性能,解决软件系统平台关键技术问题攻关、核心功能模块设计、核心代码开发。 3、在项目需求不断细化的工程中校正整体的架构设计,以及详细模块拆分设计。 4、营造技术学习氛围,带领...

qq_36860032的博客 727

阿里巴巴Java架构师岗面试题(正式版)!

1、为什么要用SpringBoot2、Spring Boot的核心注解是哪个?它主要由哪几个注...3、运行Spring Boot有哪几种方式?4、如何理解Spring Boot中的Starters?5、如何在Spring Boot启动的时候运行—些特定的代码?6、Spring Boot需要独立的容器运行吗?7、Spring Boot中的监视器是什么?8、如何使用Spring Boot实现异常处理?9、你如何理解Spring Boot中的Starters?

程序员高级码农的博客 1319

JAVA架构师学习路线图(绝对详细)

JAVA架构师学习路线图(绝对详细)性能调优Jvm性能调优JVM类加载机制详解JVM内存模型垃圾收集机制详解十种垃圾收集器详解JVM调优工具详解GC日志详细分析JVM调优实战Mysql性能调优SQL执行原理详解索引底层剖析执行计划与SQL优化Mysql锁机制与事务隔离级别详解Tomcat调优整体认知Tomcat项目架构生产环境配置掌握Tomcat 线程模型背后原理Nginx调优Nginx快速掌握熟练掌握Nginx核心配置掌握Nginx负载算法配置并发编程操作系统内核原理JMM内存模型并发同步处理并发包之to

@龙猫的博客 1万+

精妙绝伦!阿里资深架构师撰写这份:并发编程,可谓“独具匠心”

写在前面 并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。现在几乎100%的公司不但面试都必须问到并发编程,而且在日常工作和开发当中更是需要并发编程的使用,尤其是在互联网公司,它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。 并发编程笔记 计算机领域从来都不乏变革,每一次都带来新的机遇与挑战。“并发编程” 无疑是一场令人激动的变革。迎接技术变革与挑战,是软件开发者的空气和水。很高兴你已经读到了这里,那么

m0_50180963的博客 1001

JVM内存模型与Java内存模型

博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主。

激流丶的博客 2451

java架构师进阶之路

包含了计算机基础、算法和数据结构、常用工具、java核心知识、性能优化、基础框架、数据库、消息队列、缓存中间件、搜索引擎、大数据、RPC、网关、容器、面试等知识

henhenha的博客 5843

干货!阿里P8大佬竟传授这份神仙并发编程笔记给我,肝完轻松拿到阿里、字节offer

参加过Java岗位面试的小伙伴应该都清楚,并发编程方面考点的重要性。 “我不知道该如何学习,跟着哪个方向走才能保证万无一失”。但其实在我看来,这个问题的答案很简单,那就是“专注于学习那些不变的底层知识”。 如果你也正好在并发编程原理方面理解的不透彻,应对面试官的提问有些发怵。这里小编就要给大家分享一个神仙级并发编程核心笔记了,图文并茂,非常适合有需要学习并发编程原理的朋友! 笔记原作者:来自于阿里P8级架构师笔记文档特点:条理清晰,图文并茂更加易懂。 资料领取点击传送门免费获取 ...

qq13321123的博客 305
上一篇: 亡羊补牢,犹未迟也丨Java程序员面试时如果发现回答不好,该怎么办?
下一篇: 阿里P7架构师浅析:如何优化Java程序设计和编码提高性能!
Java_supermanNO1
博客等级 码龄7年 1170粉丝 329原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值