看懂血赚!JDK源码剖析及大型网站技术架构与业务架构融合之道

Java并发编程:多进程、多线程和多协程,从0到1,一步步解析,太厉害了! 并发编程可选择的方式有多进程、多线程和多协程。作者在另一本书《软件架构设计:大型网站技术架构与业务架构融合之道》中,曾对这三种方式进行了详细的比较。 对于Java来说,它既不像C++那样,在运行中调用Linux的系统API去“fork”出多个进程;也不像Go那样,在语言层面原生提供多协程。在Java中,并发就是多线程模式。 对于人脑的认知来说,“代码一行行串行”当然最容易理解。但在多线程下,多个线程的代码交叉并行,要访问互斥资源,要互相通信。作为开发者,需要仔细设计线程之间的互斥与同步,稍不留心,就 阅读详情

前言

并发编程可选择的方式有多进程、多线程和多协程。对于Java来说,它既不像C++那样,在运行中调用Linux的系统API去“fork”出多个进程;也不像Go那样,在语言层面原生提供多协程。在Java中,并发就是多线程模式。

本文基于JDK 7和JDK 8,对整个Concurrent包进行全面的源码剖析。JDK 8中大部分并发功能的实现和JDK 7一样,但新增了一些额外特性。例如CompletableFuture、ConcurrentHashMap的新实现、StampedLock、LongAdder等。

对整个Concurrent包的源码进行分析,有以下几个目的:

  • (1)帮助使用者合理地选择解决方案。Concurrent包很庞大,有各式各样的线程互斥与同步机制。明白实现原理,使用者可以根据自己的业务场景,选择最适合自己的解决方案。避免重复造轮子,也避免因为使用不当而掉到“坑”里。
  • (2)对源码的分析,将让使用者对内存屏障、CAS原子操作、锁、无锁等底层原理的认识,不再停留于一个“似是而非”的阶段,而是深刻地认识其本质。
  • (3)吸收借鉴大师的思维。在 Concurrent 包中,可以看到各种巧妙的并发处理策略。看了Concurrent包,才会发现在多线程中,不是只有简陋的互斥锁、通知机制和线程池。

本文将从多线程基础知识讲起,逐步地深入整个Concurrent包。读完本书,你将对多线程的原理、各种并发的设计原理有一个全面而深刻的理解。

第1章 多线程基础

  • 1.1 线程的优雅关闭
  • 1.2 InterruptedException()函数与interrupt()函数
  • 1.3 synchronized关键字
  • 1.4 wait()与notify()
  • 1.5 volatile关键字
  • 1.6 JMM与happen-before
  • 1.7 内存屏障
  • 1.8 final关键字
  • 1.9 综合应用:无锁编程

     

第2章 Atomic类

从本章开始,我们将从简单到复杂,从底层到上层,一步步剖析整个 Concurrent 包的层次体系,如图所示:

  • 2.1 AtomicInteger和AtomicLong
  • 2.2 AtomicBoolean和AtomicReference
  • 2.3 AtomicStampedReference和AtomicMarkableReference
  • 2.4 AtomicIntegerFieldUpdater、AtomicLongFieldUpdater和AtomicReferenceFieldUpdater
  • 2.5 AtomicIntegerArray、AtomicLongArray和Atomic-ReferenceArray
  • 2.6 Striped64与LongAdder

     

第3章 Lock与Condition

  • 3.1 互斥锁
  • 3.2 读写锁
  • 3.3 Condition
  • 3.4 StampedLock

     

第4章 同步工具类

除了锁与 Condition,Concurrent 包还提供了一系列同步工具类。这些同步工具类的原理,有些也是基于AQS的,有些则需要特殊的实现机制,这一章将对所有同步工具类的实现原理进行剖析。

  • 4.1 Semaphore
  • 4.2 CountDownLatch
  • 4.3 CyclicBarrier
  • 4.4 Exchanger
  • 4.5 Phaser

     

第5章 并发容器

在Lock和Phaser的实现中,已经介绍了基于CAS实现的无锁队列和无锁栈。本章将全面介绍Concurrent包提供的各种并发容器。

  • 5.1 BlockingQueue
  • 5.2 BlockingDeque
  • 5.3 CopyOnWrite
  • 5.4 ConcurrentLinkedQueue/Deque
  • 5.5 ConcurrentHashMap
  • 5.6 ConcurrentSkipListMap/Set

     

第6章 线程池与Future

  • 6.1 线程池的实现原理
  • 6.2 线程池的类继承体系
  • 6.3 ThreadPoolExector
  • 6.4 Callable与Future
  • 6.5 ScheduledThreadPoolExecutor
  • 6.6 Executors工具类

     

第7章 ForkJoinPool

  • 7.1 ForkJoinPool用法
  • 7.2 核心数据结构
  • 7.3 工作窃取队列
  • 7.4 ForkJoinPool状态控制
  • 7.5 Worker线程的阻塞—唤醒机制
  • 7.6 任务的提交过程分析
  • 7.7 工作窃取算法:任务的执行过程分析
  • 7.8 ForkJoinTask的fork/join
  • 7.9 ForkJoinPool的优雅关闭

     

第8章 CompletableFuture

从JDK 8开始,在Concurrent包中提供了一个强大的异步编程工具CompletableFuture。在JDK8之前,异步编程可以通过线程池和Future来实现,但功能还不够强大。CompletableFuture的出现,使Java的异步编程能力向前迈进了一大步。在探讨CompletableFuture的原理之前,先详细看一下CompletableFuture的用法,从这些用法中,可以看到相较之前的Future有哪些能力得到了提升。

  • 8.1 CompletableFuture用法
  • 8.2 四种任务原型
  • 8.3 CompletionStage接口
  • 8.4 CompletableFuture内部原理
  • 8.5 任务的网状执行:有向无环图
  • 8.6 allOf内部的计算图分析

专家推荐

软件架构设计:大型网站技术架构与业务架构融合之道

这两份阿里大牛编写的【软件架构设计:大型网站技术架构与业务架构融合之道】+【Java并发实现原理:JDK源码剖析】两份资料一共641页,因为内容实在是太多了,咱们在这里就不做过多的介绍啦

软件架构设计:大型网站技术架构与业务架构融合之道:目录如下

系统解析JDK源码,领略大牛设计思想,JAVA进阶必备(2023新课,已完结) 立即下载

相关推荐

经典蓝牙中的Sniff、Hold与Park模式

若主设备在Sniff Attempt窗口外发送数据,从设备无法接收,需依赖重传机制。移动时立即传输数据。:Sniff Interval=20ms,Attempt=1时隙。:传感器每2秒唤醒一次同步信标,主设备按需唤醒特定传感器采集数据。Slave进入Sniff模式:每20ms唤醒1个时隙监听数据。:设备需要短暂执行高优先级任务(如扫描其他蓝牙设备)。:无数据传输超时后,设备可能自动进入Sniff模式。:主设备通过信标唤醒从设备,或从设备主动请求退出(:平衡功耗与响应速度,适合间歇性数据传输设备。

shishuangquan111的博客 1675

Java学习课件框架,12月最新Java学习路线图(完整详细版)

各种各样的编程语言不断崛起,但唯有Java是牢牢占据着老大的位置,目前几乎90%以上的大中型互联网应用系统在服务器端开发首选Java。因此,也是吸引了不少年轻人投入到Java的学习之中。 但不得不说,Java作为老牌编程语言,学习起来还是需要系统才行的。不少小伙伴会通过在网络上找各种各样的学习视频去研究学习,却往往缺乏了系统全面的学习路线。所以,今天,千锋的老师就跟大家分享一份系统的Java学习...

qfxulei的博客 1624

国产麒麟系统下Kettle安装避坑指南:解决aarch64架构不兼容问题

本文针对在国产麒麟系统上安装Kettle时遇到的aarch64架构不兼容问题,提供了详细的解决方案。通过剖析错误根源,指导用户获取并放置正确的SWT库文件,并修改启动脚本,成功解决“平台不支持”的报错,确保ETL工具在ARM架构的国产化环境中顺利运行。

weixin_29214691的博客 278

阿里P8带你深入看源码,探究多线程原理,只靠这份384页笔记

并发编程可选择的方式有多进程、多线程和多协程。作者在另一本书《软件架构设计:大型网站技术架构与业务架构融合之道》中,曾对这三种方式进行了详细的比较。 对于Java来说,它既不像C++那样,在运行中调用Linux的系统API去“fork”出多个进程;也不像Go那样,在语言层面原生提供多协程。在Java中,并发就是多线程模式。 对于人脑的认知来说,“代码一行行串行”当然最容易理解。但在多线程下,多个线程的代码交叉并行,要访问互斥资源,要互相通信。作为开发者,需要仔细设计线程之间的互斥与同步,稍不留心

代码界的扛把子 173

基于Sentinel-2(哨兵2)遥感卫星的植被覆盖度提取

基于Sentinel-2(哨兵2)遥感卫星的植被覆盖度提取 一、Sentinel-2简单介绍 哨兵-2系列卫星的主要载荷多光谱成像仪拥有13个谱段,从可见光到近红外再到短波红外,空间分辨率从10m到60m,能实现全所未有的陆地海洋监测水平。其幅宽高达290KM,且A、B双星组合,覆盖能力比美国Landsat8卫星强很多。目前哨兵-2A和哨兵-2B已经实现了5天的重访时间,即使在之前仅有单颗卫星时,...

weixin_44143671的博客 2万+

程序员的自我修养

一个好的程序员的自我修养需要从不同角度出发,工作能力是一个方面,对自身的定位和了解也是一个方面,程序员的工作能力修养包括需求理解、功能设计、沟通确认、代码规范、成果验证、代码重构优化等,通过自我剖析来对自身进行定位并了解自身的优缺点,如去除劣根性、端正意识形态与态度、提升自己的核心竞争力等。 自我剖析 一个成功的人,必须要先了解自己,只有了解自己是什么样的人,了解自身有哪些优缺点,了解自己更合适做什么工作,知道自己做什么才能发挥出自身的优势,这样才能使自己在工作中发光发热,在职业生涯的道路上走的更远。

数通畅联 1679

这份JDK源码解析,建议反复观看,写的真的跟详细了!

1. 概述 这个抽象类是StringBuilder和StringBuffer的直接父类,实现了两个接口分别是Appendable, CharSequence CharSequence是一个字符序列的接口,主要提供了一下的方法 该接口规定了需要实现该字符序列的长度:length(); 可以取得下标为index的的字符:charAt(int index); 可以得到该字符序列的一个子字符序列: subSequence(int start, int end); 重写了父类Object的toString():toS

weixin_49494194的博客 849

std::map看来可以被淘汰了?可以用vector来替代,而且更好

vector的优势在于内存连续,可以先std::sort,然后std::lower_bound,或者std::binary_search。而std::map,insert的时候,需要new出内存。

tumu_C的博客 1020

2024年最新十五万字《JDK源码分析》之《JSR-310(java8 新日期时间API)

System.out.println(“本月的第二个周五:” + now.with(TemporalAdjusters.dayOfWeekInMonth(2,DayOfWeek.FRIDAY)));System.out.println(“两周后:” + now.with(TemporalAdjusters.ofDateAdjuster(date -> date.plusWeeks(2))));* @param epochMilli 从1970-01-01T00:00:00Z开始计数的毫秒数。

2401_84691757的博客 250

4、LTE无人机认证:保障通信安全的新方案

本文针对LTE网络中无人机通信存在的安全风险,提出了一种基于可信第三方GCS的新型认证协议。该协议通过非对称加密和哈希函数保护IMSI等敏感信息,防止身份泄露、中间人攻击、拒绝服务攻击和位置追踪等威胁。利用Scyther工具对协议进行形式化分析,验证了其在机密性、一致性和活性等方面的安全属性,证明该方案能有效提升无人机在LTE网络中的通信安全性与隐私保护能力。

pink的博客 63

深度学习实战12(进阶版)-利用Dewarp实现文本扭曲矫正

大家好,我是微学A1, 我们在生活中会看到一些拍摄扭曲的图片,我们在通过OCR识别的时候,因为扭曲的厉害,而无法识别,我们需要对图片进行处理。

微学AI的博客 3157

《jdk8u源码分析》6.1.GetJREPath

src/windows/bin/java_md.c::GetJREPath /* * Find path to JRE based on .exe's location or registry settings. */ jboolean GetJREPath(char *path, jint pathsize) { char javadll[MAXPATHLEN]; struc...

johnjoe's blog 432

5、癌症数据预处理技术与深度学习在癌症预测中的应用

本文详细介绍了癌症数据预处理技术和深度学习在癌症预测中的应用。针对CT扫描图像、X射线图像、超声图像、基因表达数据和文本数据等不同类型的癌症数据,分别阐述了去噪、插值、配准、归一化等预处理技术的具体方法。同时,分析了深度学习在乳腺癌、白血病和宫颈癌预测中的作用,结合相关影响因素探讨了模型的应用潜力。此外,还总结了深度学习在癌症预测中面临的挑战及未来发展方向,为癌症的早期诊断与精准预测提供了理论支持和技术参考。

alice7model的博客 123

白嫖必看!这份由阿里P8大牛编译的JDK源码剖析及大型网站技术架构与业务架构融合之道1000页笔记

前言 并发编程可选择的方式有多进程、多线程和多协程。对于Java来说,它既不像C++那样,在运行中调用Linux的系统API去“fork”出多个进程;也不像Go那样,在语言层面原生提供多协程。在Java中,并发就是多线程模式。 本文基于JDK 7和JDK 8,对整个Concurrent包进行全面的源码剖析。JDK 8中大部分并发功能的实现和JDK 7一样,但新增了一些额外特性。例如CompletableFuture、ConcurrentHashMap的新实现、StampedLock、LongAdder等

weixin_49435872的博客 406

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

java网站源码_阿里P8带你深入看源码,探究多线程原理,只靠这份384页笔记

并发编程可选择的方式有多进程、多线程和多协程。作者在另一本书《软件架构设计:大型网站技术架构与业务架构融合之道》中,曾对这三种方式进行了详细的比较。对于Java来说,它既不像C++那样,在运行中调用Linux的系统API去“fork”出多个进程;也不像Go那样,在语言层面原生提供多协程。在Java中,并发就是多线程模式。对于人脑的认知来说,“代码一行行串行”当然最容易理解。但在多线程下,多个线程的...

weixin_34985445的博客 103

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

阿里P8带你深入看源码,探究多线程原理,只靠这份400页笔记

阿里P8带你深入看源码,探究多线程原理,只靠这份400页笔记

javaAnPou的博客 116

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

阿里P8带你深入看源码,探究多线程原理

对于Java来说,它既不像C++那样,在运行中调用Linux的系统API去“fork”出多个进程;也不像Go那样,在语言层面原生提供多协程。在Java中,并发就是多线程模式。 对于人脑的认知来说,“代码一行行串行”当然最容易理解。但在多线程下,多个线程的代码交叉并行,要访问互斥资源,要互相通信。作为开发者,需要仔细设计线程之间的互斥与同步,稍不留心,就会写出非线程安全的代码。正因此,多线程编程一直是一个被广泛而深入讨论的领域。

老男孩的架构路 112

年轻人不讲武德,免费分享的白嫖字节技术专家的JDK源码手册,耗子为汁

前言 并发编程可选择的方式有多进程、多线程和多协程。对于Java来说,它既不像C++那样,在运行中调用Linux的系统API去“fork”出多个进程;也不像Go那样,在语言层面原生提供多协程。在Java中,并发就是多线程模式。 本文基于JDK 7和JDK 8,对整个Concurrent包进行全面的源码剖析。JDK 8中大部分并发功能的实现和JDK 7一样,但新增了一些额外特性。例如CompletableFuture、ConcurrentHashMap的新实现、StampedLock、LongAdder等。

weixin_47908466的博客 338

中科院十年架构师整理出国内首屈一指的Java并发实现原理笔记

由浅入深看源码 探究多线程原理并发编程可选择的方式有多进程、多线程和多协程。在另一本书《软件架构设计:大型网站技术架构与业务架构融合之道》中,曾对这三种方式进行了详细的比较。对于Java来说,它既不像C++那样,在运行中调用Linux的系统API去“fork”出多个进程;也不像Go那样,在语言层面原生提供多协程。在Java中,并发就是多线程模式。对于人脑的认知来说,“代码一行行串行”当然最容易理解...

Java架构技术交流 172

ssm+java2026年毕设蔬菜水果销售网站【源码+论文】

本文介绍了一个基于SSM框架的农产品信息管理系统开发项目。系统针对中小型农产品批发市场的管理需求,设计了七大功能模块:用户管理、蔬菜/水果信息管理、分类管理、供应商管理及新品促销管理。采用Java+Spring+MyBatis技术栈,MySQL数据库,实现农产品信息化管理。研究重点包括农产品分类编码体系构建、库存管理优化和促销策略模型设计。系统旨在解决传统农产品管理中的信息不对称、库存粗放等问题,提升供应链协同效率。开发过程遵循软件工程规范,包含完整的文档体系和技术方案。项目成果将为农产品流通数字化转型提供

sheji5998的博客 390

ssm+java2026年毕设舒旅程旅游景点预订网站【源码+论文】

本文提出基于SSM框架的企业会议管理系统开发方案,旨在解决传统会议管理中存在的通知滞后、资源冲突、流程不规范等问题。系统采用Java技术栈,包含用户管理、会议通知、会议类目、会议业务和操作审计五大功能模块,实现从会议申请到归档的全流程信息化管理。研究重点包括冲突检测算法设计、实时通知推送机制和RBAC权限控制模型,预期通过标准化流程和智能化功能提升会议效率30%以上。开发采用Maven构建工具,使用MySQL5.7数据库,部署于Tomcat7.0服务器,最终形成可扩展的会议管理平台,为企业提供高效规范的会议

sheji9301的博客 333

ssm+java2026年毕设求职网站【源码+论文】

本文研究开发基于SSM框架的高校就业信息管理系统,旨在解决传统校园招聘中存在的信息不对称、对接效率低等问题。系统采用B/S架构,整合专业管理、企业招聘、学生求职等八大功能模块,实现就业服务全流程信息化。研究运用软件工程方法,通过优化数据库查询、采用WebSocket技术等解决多表关联、实时通讯等技术难点。预期成果包括可运行系统原型、完整技术文档及毕业论文,为提升高校就业服务质量提供信息化解决方案。系统开发环境为MySQL5.7+JDK1.8+Tomcat7.0,采用Maven进行项目管理。

sheji9301的博客 389

ssm+java2026年毕设四川旅游网站【源码+论文】

本文介绍了一个基于SSM框架的旅游服务管理系统,旨在解决区域性旅游信息化管理问题。系统整合了旅游线路预订与酒店资源管理功能,采用JavaEE技术栈实现用户管理、智能推荐、在线预订等核心模块。研究重点包括旅游资源整合、个性化推荐算法优化和系统性能提升,采用软件工程方法进行开发。该系统针对传统旅游平台在中小型服务商支持不足、用户体验待优化等问题,提供了技术解决方案。预期成果包括完整的系统实现、技术文档和毕业论文,具有重要的理论价值和实践意义,可为智慧旅游发展提供参考。

sheji1305的博客 370
上一篇: 你总要一个人学习分布式服务框架,最后才能惊艳到所有人
下一篇: 阿里P8架构师:你不精通“算法和数据结构”就是进不了大厂
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值