【社区图书馆】《深入理解高并发编程:JDK核心技术》读后感

news2024/11/18 18:39:17

作者简介

        首先要隆重介绍的肯定是《深入理解高并发编程:JDK核心技术》的作者:冰河,作为互联网资深技术专家、数据库技术专家、分布式与微服务架构专家。他多年来一直致力于分布式系统架构、微服务、分布式数据库、分布式事务与大数据技术的研究,在高并发、高可用、高扩展性、高维护性和大数据等领域拥有丰富的架构开发经验。

        不仅如此,冰河还有其他著作,比如说《可视化多数据源异构中间件mykit-data》,该书的前传《深入理解高并发编程:核心原理与案例实战》、《深入理解分布式事务:原理与实战》、《海量数据处理与大数据技术实战》、《MySQL技术大全:开发、优化与运维实战》等等。如果还想更加深入理解作者的话,下方是他在CSDN的博客链接,有兴趣的读者可以自行前往对作者冰河进行更深层次的了解:

null冰 河擅长精通大数据系列,精通Java系列,精通MySQL系列,等方面的知识,冰 河关注架构,神经网络,redis,推荐算法,tensorflow,elasticsearch,web安全,spark,devops,安全架构,linux,jenkins,mysql,hadoop,storm,网络,深度学习,自动化,系统架构,排序算法,flink,聚类,nlp,安全,系统安全,centos,分类领域.https://blog.csdn.net/l1028386804?type=lately

深得体会

        《深入理解高并发编程:JDK核心技术》是一本介绍高并发编程的技术书籍,通过对JDK核心技术的剖析,深入探讨了高并发编程的原理、方法和技巧,是一本值得推荐的好书。

        本书的篇幅不长,但是内容非常实用,是一本很好的技术实践指南。作者从Java的多线程、线程池、并发集合、锁等方面入手,通过详细的代码示例和解读,深入分析了高并发编程的相关技术,以及这些技术的实际应用。

        在本书中,作者详细介绍了Java多线程编程的基础知识,让读者能够快速掌握Java多线程编程的基本概念、方法和技巧。同时,作者还介绍了多种实际场景下的多线程编程实现方式,并探讨了这些实现方式的优缺点和适用范围。

        此外,本书还详细讲解了Java并发集合、线程池、锁等核心技术,解决了高并发编程中常见的一些问题,如线程安全、性能问题等。作者还提供了多种优秀的解决方案和最佳实践,让读者能够更加深入地理解和运用这些技术,从而更加高效地实现高并发编程。

        总之,本书详细介绍了高并发编程的核心技术,具有实用性和指导性,并通过大量的实际案例和代码示例,让读者深入理解高并发编程的原理和方法。无论您是Java初学者,还是有一定编程经验的开发者,本书都是一本值得深入阅读的技术书籍。

本书架构

        该书从实际需求出发,将全书分为三个大的篇章,分别是:JDK高并发编程的基础知识、核心工具和线程池核心技术。看下图:

在这里插入图片描述

第一篇 基础篇(第1~2章)

        本篇简单地介绍了进程与线程的基本概念、线程调度与上下文切换、进程与线程的综合对比、如何查看进程与线程的运行时信息,以及线程和线程组的基本操作。

进程
        从某种程度上来讲,进程其实是内存中正在运行的程序实例,被分配了一定的空间,各个进程在运行的过程中互不干扰。
进程的基本概念及构成
        一般来说,一个进程就是内存中正在运行的一个实例,是系统进行资源分配的基本单位。目前,大部分程序可以同时启动并运行多个进程实例,有些程序只能启动并运行一个进程实例。例如,当打开浏览器时,会启动多个进程实例;当运行 Java 程序时,会启动一个对应的JVM进程实例。进程具有动态性、并发性、独立性和异步性。·还学到了进程的以下概念:

  • 进程ID:进程的唯一编号。
  • 进程互斥:当多个进程操作同一个资源时,同一时刻只允许一个进程使用资源,其他进程在当前进程使用资源时必须等待,直到当前进程释放资源。·临界资源:同一时刻只允许一个进程访问的资源。
  • 临界区:临界区本质上是一段代码片段,即在进程中访问临界资源的代码片段,需要保证进程互斥地进入各自的临界区。
  • 进程同步:多个并发运行的进程按照一定的顺序执行的过程。

        而且让我学到了:线程是CPU调度的基本单位,使用多线程编程能够更好地利用 CPU 的资源,充分发挥多核CPU的计算性能。在Java 的多线程编程中,有很多简单易用的API,使用这些API可以方便地创建线程并对线程进行操作。线程的创建方式主要包括继承Thread 类、实现Runnable接口、实现Callable 接口、FutureTask配合Thread和使用线程池5种。

第二篇 核心工具篇(第3~13章)

        本篇通过大量源码和案例详细介绍了JDK的各种并发工具,涵盖同步集合、并发List集合类、并发Set集合类、并发Map集合类、并发阻塞队列、并发非阻塞队列、并发工具类、锁工具类、无锁原子类、线程工具类和异步编程工具类。几乎每个章节都配有JDK核心工具类的源码及实战案例,有助于读者理解。

        让我知道了JDK提供了非常丰富的集合类、并发工具类、锁工具类、线程工具类,Java8中又新增了对并行流的操作和异步编程的工具类等,使用JDK提供的并发编程工具类能够极大地降低并发编程的复杂度。

同步集合Vector

        比如说同步集合Vector:Vector 是从JDK1.0开始提供的一个线程安全的同步集合类,在某些情况下需要通过对额外的客户端或者同步集合类加锁来保护在 Vector 集合中进行的复合操作。当在Vector 集合上执行循环遍历、根据当前元素获取下一个元素,或者根据某一条件执行后续逻辑等复合操作时,如果有其他线程并发修改 Vector 集合中的元素,就会出现线程安全问题。

并发集合CopyOnWriteArrayList

        还有并发集合:Java 并发包中的并发 List 集合只有CopyOnWriteArrayList 使用时复制技术,添加、修改或删除 CopyOnWriteArrayList 中的数据都是基于底层数组的一个进行的,CopyOnWriteArrayList 类是线程安全的类。每个CopyOnWriteArrayList类内部都有一个对象数组类的成员变量 array 用来指向存体元素的数组,还会有一个 ReentrantLock 独占锁类型的成员变量 lock 用来保证在同一时能有一个线程修改 array 数组中的数据。CopyOnWriteArrayList 类的类继承CopyOnWriteArrayList 类实现了 List 接口,CopyOnWriteArrayList前层本质上是一个数组。这个数组的读操作会直接返回原数组中的值:这个数组的写操作(创添加元素、修改元素和删除元素 )会首先获取 ReentrantLock 独占锁,然后复制一份底层影array 的副本,在 array 数组副本上进行写操作,在执行完毕后,再将 array 数组的副本赋值给引用。

第三篇 线程池核心技术篇(第14~16章)

        本篇深入剖析了JDK中线程池的核心源码。包括线程池顶层接口和抽象类、线程池正确运行的核心流程、线程池执行任务的核心流程、Worker线程的核心流程、线程池优雅退出的核心流程、ScheduledThreadPoolExecutor类与Timer类的区别、定时任务线程池的初始化、调度流程和优雅关闭流程等。通过对本篇的学习,读者能够从源码级别深刻理解线程池的核心原理和执行流程。

        在真实高并发场景下,一般不会直接使用 Thread 类创建线程,而是使用线程池来创建并管傅线程。可以这么说,学好线程池对于并发编程是非常重要的。

线程池简介

        线程池的创建和回收是一个非常消耗系统资源的过程,如果在系统中频繁地创建和回收线程,会极大降低程序的执行性能。并且,短时间内创建大量的线程可能造成 CPU 占用 100%、死机或内存溢出等问题。而使用线程池就能非常轻松地解决这些问题。

线程池核心类继承关系

        线程池是 Java 从JDK 1.5 版本开始提供的一种线程使用模式,能够自动创建和回收线程,并管理线程的生命周期。在线程池中能够管理和维护多个线程。
        Java 的线程池主要是通过 Executor 框架实现的,涉及 Executor 接口、ExecutorServcie 接口、AbstractExecutorService 抽象类、ScheduledExecutorService 接口、ThreadPoolExecutor 类和ScheduledThreadPoolExccutor类。实现线程池最核心的类是 ThreadPoolExecutor,而 ScheduledThreadPoolExecutor 类实现了定时任务功能,能够使提交到线程池中的任务定时、定期执行。为了便于创建线程池,JDK 还提供了一个 Executors 工具类,Executors 类中封装了创建线程池的名种方法,专门用于创建线程池。不过,在真实的高并发场景下,并不推荐使用 Execulors 工具类创建线程池,而是推荐直接使用 ThreadPoolExecutor类创建线程池。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/585487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【P41】JMeter 简单控制器(Simple Controller)

文章目录 一、简单控制器(Simple Controller)参数说明二、测试计划设计 一、简单控制器(Simple Controller)参数说明 该组件,是一个占位符,用于脚本模块化管理,无任何逻辑作用,也不…

0604嵌套路由与路由传参-react路由-react

文章目录 1 嵌套路由1.1 使用1.2 总结 2 路由传参2.1 示例准备2.1 传递params参数2.2 传递search参数2.3 传递state参数2.4 路由参数总结 结语 1 嵌套路由 1.1 使用 示例效果如下图1.1-1所示: 该示例代码其他部分和上一篇相同,这里主要讲解下嵌套路由的…

CVPR2023 I NeRF-Supervised Deep Stereo:不需要任何ground-truth数据

论文题目:NeRF-Supervised Deep Stereo 作者:Fabio Tosi ;Alessio Tonioni; Daniele De Gregorio等人 作者机构:University of Bologna(博洛尼亚大学);Google Inc(全球最大的搜索引擎之一);Eyecan.ai(韩国专注于开发眼动追踪技术的公司) 在公众号「3D视觉工坊」后台回复「…

老电脑重生:深度剖析各部件的羁绊关系

目录 引言: 正文: 主板: CPU 参数: 分类 接口 intel CPU升级推荐 AMD CPU升级推荐 CPU散热器: 内存条 硬盘 独立显卡 电源 机箱 总结 引言: 在科技日新月异的时代,我们与…

【从零到Offer】- HashMap与HashSet

​ HashMap与HashSet是我们日常最常使用的两个集合类。在实现上,两者也有很大的相似性。HashSet基本就是对HashMap的一个简单包装。 ​ 为了更好的理解Hash结构的实现原理,从而更好的指导我们的代码使用,本文就主要对HashMap的实现及设计做分…

Java并发体系-第二阶段-锁与同步-[3](仅做了解吧不好理解)

synchronized保证三大特性 synchronized保证原子性的原理 对num;增加同步代码块后,保证同一时间只有一个线程操作num;。就不会出现安全问题。 synchronized保证可见性的原理 synchronized保证可见性的原理,执行synchronized时,会对应lock…

下载STM32固件库

不想找的可直接输入下面的网址 https://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html 官网下载的慢,阿里云链接 STM32固件 https://www.aliyundrive.com/s/e2Q3j19Bnkv 点击链接保存,或者复制本段内容,打开…

【UE】不规则物体外轮廓发光

效果 按下2键显示鼠标,将鼠标移动到指定的物体身上然后按下ctrl键就会使得指定物体高亮显示。 步骤 1. 创建一个材质并打开 材质域设置为后期处理 可混合位置改为“色调映射前” 添加如下节点: 2. 打开玩家控制的蓝图,添加如下节点 3. 场景…

新手装sql

windows sever 安装完了得装个sql,我也不会,按网上找到的资料,一步一步试吧 到这个地址去下载SQL Server https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 谁能救救我,全是英文,都看不懂&#xff0…

sentinel持久化

sentinel规则推送模式 原始模式 在sentinel源码中是不支持规则持久化的,一旦sentinel服务宕机,匹配的所有规则将彻底消失。在上篇博客中展示了sentinel的源码流程图,在sentinel dashboard新增一条流控规则(或者其他规则&#xf…

Boost开发指南-1.3date_time

date_time date_time库勇敢地面对了这个挑战,并成功地解决了大部分问题。它是一个非常全面且灵活的日期时间库,基于我们日常使用的公历(即格里高利历),可以提供时间相关的各种所需功能,如精确定义的时间点、时间段和时…

CSS入门学习笔记+案例【一】

目录 一、CSS 是什么 二、引入方式 2.2 行内样式表 2.3 外部样式 三、 代码风格 3.1 样式格式 3.2 样式大小写 3.3 空格规范 四、 选择器 4.1 选择器的功能 4.2 选择器的种类 复合选择器小结 看完这篇博客 你将 掌握 CSS 基本语法规范和代码书写风格 掌握 CSS 选择…

ARM微架构

目录 1.流水线 2.指令流水线 3. 多核处理器​编辑 4. 工程搭建 4.1为Keil软件配置编译工具链 5.程序编写 5.1 数据处理指令 5.2 带标志位的加法ADC ADDS 5.3 跳转指令B\BL 5.4 单寄存器内存访问 5.5 批量寄存器内存访问 5.6 满减操作 1.流水线 2.指令流水线 3.…

Ansible从入门到精通【三】

大家好,我是早九晚十二,目前是做运维相关的工作。写博客是为了积累,希望大家一起进步! 我的主页:早九晚十二 专栏名称:Ansible从入门到精通 立志成为ansible大佬 ♣ansible的高级指令 ansible-playbook写一…

Java 集合中 ArrayList 的扩容机制原理(面试+读源码)

在 Java 中,ArrayList 内部是通过一个数组来存储元素的,是一个数组结构的存储容器。当向一个 ArrayList 中添加元素时,如果当前数组已经满了,就需要扩容。 集合的继承关系图 一、面试回答 ( ArrayList 的扩容机制原理 ) 面试…

Vue 脚手架(打包工具)的理解 - 配置文件理解

序言 Vue 脚手架是 Vue 作为一个前端开发项目的最核心点,将JavaScript、CSS、HTML这几种前端自动整合,极大的简化了前端开发工作。 没有 Vue 脚手架,就没有 Vue ,这是一定的,Java 语言和C语言都需要编译,…

【论文阅读】Analyzing group-level emotion with global alignment kernel based approach

【论文阅读】Analyzing group-level emotion with global alignment kernel based approach 摘要1.介绍与相关工作2.方法3.实验 摘要 本篇博客参考IEEE于2022年收录的论文Analyzing group-level emotion with global alignment kernel based approach,对其主要内容…

new一个ObjectInputStream为什么会出现java.io.EOFException

一、举例代码 package com.softeem.wolf.homework06;import java.io.*;/*** Created by 苍狼* Time on 2023-05-24*/ public class App {public static void main(String[] args) throws IOException {ObjectInputStream ois null;ObjectOutputStream oos null;ois new Obj…

功率信号源的特点和用途是什么

功率信号源是一种电子测量仪器,它集信号发生器与功率放大器为一体,具有高电压、大功率的特点。在电子实验室中,功率信号源可以帮助用户驱动压电陶瓷、换能器以及电磁线圈等,有效地解决了驱动负载和放大功率的问题。下面我们来具体…

Linux:LAMP的架构与环境配置

这里写目录标题 一、LAMP1.1 LAMP是什么1.2 安装顺序 二、编译安装Apache httpd服务2.1 关闭防火墙,将安装Apache所需软件包传到/opt目录下2.2 安装环境依赖包2.3 配置软件模块2.4 编译及安装2.5 优化配置文件路径2.6 添加httpd系统服务2.7 修改httpd 服务配置文件2…