谁懂,java后端面试多次惨败并发的苦!幸好有阿里首发并发编程学习文档,系统全面还便于上手!

news2024/11/21 0:22:53

什么是并发

并发指的在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
并发和并行是十分容易混淆的概念。并发指的是多个任务交替进行,而并行则是指真正意义上的“同时进行”。实际上,如果系统内只有一个CPU,而使用多线程时,那么真实系统环境下不能并行,只能通过切换时间片的方式交替进行,而成为并发执行任务。真正的并行也只能出现在拥有多个CPU的系统中。

为什么要用到并发(优点)

并发处理的广泛应用是Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类压榨计算机运算能力的最强有力武器。 ——《深入理解java虚拟机 第三版》

我们都知道,计算机包括很多模块,例如运算模块,通信模块,存储模块,这其中运算模块即CPU的能力太强大了,以至于计算机大部分时间都花在磁盘IO,网络通信等事情上。如果不希望CPU大部分时间都在等待其他资源,那么最容易想到的办法就是,让它在等待的时间去做别的事情,即同时处理几项任务。

回到本章刚开始引用的话,我们都知道,按照摩尔定律的预测,我们的计算能力会按照指数级别的速度增长。然而,近几年摩尔定律失效,聪明的硬件工程师为了进一步提升计算速度,不再追求单独的计算单元,而是将多个计算单元整合到了一起,也就是形成了多核CPU。短短十几年的时间,家用型CPU,比如Intel i7就可以达到4核心甚至8核心。因此,摩尔定律似乎在CPU核心扩展上继续得到体验。因此,多核的CPU的背景下,催生了并发编程的趋势,通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升。

另外,在特殊的业务场景下先天的就适合于并发编程。比如当我们在网上购物时,为了提升响应速度,需要拆分,减库存,生成订单等等这些操作,就可以进行拆分利用多线程的技术完成。面对复杂业务模型,并行程序会比串行程序更适应业务需求,而并发编程更能吻合这种业务拆分 。
综上:并发编程具有以下优点:

并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升。
面对复杂业务模型,并行程序会比串行程序更适应业务需求,而并发编程更能吻合这种业务拆分。

而在在实习与秋招面试过程中,也会多次问到java并发相关问题,小编自己也零零星星的看了很多视频和技术博客。但苦于这部分对于小白来说,确实理解起来有一定难度,且网上众多资料不够系统,同时很多错误且抄袭严重。 本文就给大家分享一份非常不错的学习并发的文档。

本文档有以下特点:

  • 第一,脉络清晰,内容全面。从执行器框架到流API,从并发数据结构到同步机制,从程序设计到调试测试,基本上所有与并发程序设计相关的内容都有所涉及。全书主线明晰,阅读起来比较轻松。
  • 第二,语言通俗,举例充分。教科书式的语言相对较少,原理通俗易懂,实例简洁明了。几乎针对每个重要的知识点都提供了足够的代码示例,使得学习和练习都很方便。
  • 第三,面向应用,便于上手。作者的视角并不是停留在并发编程本身,而是在于如何使用并发编程解决实际问题以及提高处理效能。读者不需要深陷于原理本身,宜结合实际各取所需,而且书中的示例也都很实用。

目录

本书内容

第1章,“第一步:并发设计原理”。这一章将介绍并发应用程序的设计原理。你还将了解到并发应用程序可能出现的问题,以及设计并发应用程序的方法论,同时还会学到一些设计模式、提示和技巧。

第2章,“使用基本元素: Thread和Runnable”。这一章将解释如何采用Java语言中最基本的元素(Runnable接口和Thread类)来实现并发应用程序。有了这些元素,你可以创建一个可与实际执行线程并行执行的新执行线程。

第3章,“管理大量线程:执行器”。这一章将介绍执行器框架的基本原理。该框架让你能够使用大量的线程,而无须创建或管理它们。你将实现k-最近邻算法和一个基本的客户端/服务器应用程序。

第4章,“充分利用执行器"。这一章将探讨执行器的一些高级特性,包括为了在一段延迟之后或每隔一定时间执行任务而进行的任务撤销和调度。你将实现一个高级客户端/服务器应用程序和一个新闻阅读器。

第5章,“从任务获取数据:callable接口与Future接口”。这一章将介绍如何在执行器中处理采用callable与Future接口返回结果的任务。你将实现一个最佳匹配算法以及一个构建倒排索引的应用程序。

第6章,“运行分为多阶段的任务: Phaser类”。这一章将介绍如何使用Phaser类来并发执行那些可分为多个阶段的任务。你将实现关键字抽取算法和遗传算法。

第7章,“优化分支解决方案:Fork/Join框架”。这一章将介绍如何使用一种特殊的执行器,该执行器针对可以使用分治法解决的问题进行了优化,这就是Fork/Join框架及其工作窃取( work-stealing )算法。你将实现k-means聚类算法、数据筛选算法以及归并排序算法。

第8章,“使用并行流处理大规模数据集:MapReduce模型”。这一章将介绍如何采用流来处理大规模数据集。你将学习如何使用流API和更多的流函数来实现MapReduce应用程序。你将实现一个数值汇总算法和一个信息检索工具。

第9章,“使用并行流处理大规模数据集:MapCollect模型"。这一章将探讨如何使用流API中的collect()方法对数据流执行可变约简(mutable reduction)操作,将其转换为一种不同的数据结构,包括在collectors类中预定义的一些收集器。你将实现一个无须建立索引就能够搜索数据的工具、一个推荐系统,以及计算社交网络中两个人的共同联系人列表的算法。

第10章,“异步流处理:反应流"。这一章将解释如何使用反应流来实现并发应用程序,而反应流则为带有非阻塞回压的异步流处理定义了标准。这种流的基本原理在官方网站的Reactive Streams介绍页面上有明确说明,而Java9为其实现提供了必要的基础接口。

第11章,“探究并发数据结构和同步工具”。这一章将介绍如何使用最重要的并发数据结构(可用于并发应用程序而不会导致数据竞争条件的数据结构),以及Java并发API中用于组织任务执行的所有同步机制。

第12章,“测试与监视并发应用程序"。这一章将介绍如何获得Java并发API元素(线程、锁、执行器等)的状态信息。你还将学习如何使用JConsole应用程序来监视并发应用程序,以及如何使用MultithreadedTC库和Java Pathfinder应用程序来测试并发应用程序。

第13章,“JVM中的并发处理:Clojure、带有Gpars库的Groovy以及Scala”。这一章将介绍如何使用面向Java虚拟机的其他编程语言来实现并发应用程序。你将学习如何使用Clojure、Scala以及带有Gpars库的Groovy等编程语言所提供的并发元素。

如果你是了解并发编程基本原理的Java开发人员,同时又想成为Java并发API的专家型用户,以便开发出能够充分利用计算机全部硬件资源的最优化应用程序,那么本书就非常适合你。

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

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

相关文章

如何测试 esp-matter_example_light 例程

此例程支持三种配网方式: 苹果手机扫码配网chip-tool 命令配网Matter 指令配网 1 使用苹果手机扫码配网 说明文档:Apple Matter 测试方法 所需设备: 苹果手机(最新版本 IOS 系统)苹果音响(Apple-Matter&a…

【文本挖掘】业绩预告原因·其一

下载数据及提取信息 在此单列前15行: 000001,平安银行,预计本公司2006年度净利润与上一年度相比将增长300%-350%。2)业绩变化原因:利润的显著增长主要是由于利差的改善、资金运用效率的提高和贷款的良好增长,不良资产的成功清收和资产质量的…

基于PHP+MySQL企业网站的设计与开发

现如今,企业网站是商业贸易中的一条非常重要的道路,可以把其从传统的实体模式中解放中来,让用户足不出户就了解到企业的各种信息,为用户提供了极大的方便,网新帮德网站的主要功能包含:企业简介,新闻功能信息,企业业务信息,在线留言等功能。网站分为管理员、会员用户…

计算机组成原理期末复习第三章-1(唐朔飞)

计算机组成原理期末复习第三章-1(唐朔飞) ✨欢迎关注🖱点赞🎀收藏⭐留言✒ 🔮本文由京与旧铺原创,csdn首发! 😘系列专栏:java学习 💻首发时间:&am…

Ubuntu 20.04安装ipopt和cppAD(安装全流程+报错解决)

文章目录参考资料1. Ipopt安装1. 方式1: 命令行安装2. 方式2:源码安装3. 方式3:源码安装4. Ipopt测试5. 报错修复2. CppAD安装1. 方式1:命令行安装2. 方式2:源码方式安装3. CppAD测试3. 测试Ipopt与CppAD是否可用1. 例…

uni——app、H5省市区选择

案例演示 步骤 封装的组件&#xff0c;之后引用组件。 父&#xff1a; <pickerAddress change"change"><input type"text" placeholder"请选择所在地区" :value"value" /><image :src"$common.image(/static/p…

[附源码]java毕业设计新闻发布和评论管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

安装Jenkins

安装Jenkins jenkins官网 1、安装jdk 1&#xff09;yum安装 yum search java|grep jdk # yum查看jdk版yum install -y java-11-openjdk #安装jreyum install -y java-devel #安装jdk2&#xff09;自定义安装 ①下载java ②上传解压tar ③配置环境变量&#xff08;此步…

原生js 之 (BOM操作)

BOM(浏览器对象模型) Window对象对应着浏览器窗口本身&#xff0c;它的属性和方法通常被统称为BOM (浏览器对象模型) BOM 提供了独立于内容而与浏览器窗口进行交互的对象。 BOM主要用于管理窗口与窗口之间的通讯&#xff0c;因此其核心对象是Window BOM由一系列相关的对象组成…

Spark DAG及内存迭代计算

文章目录DAGJob与Action之间的关系DAG和分区DAG宽窄依赖DAG宽窄依赖的划分Spark内存迭代计算总结Spark是怎么做内存计算的&#xff1f;DAG的作用&#xff1f;Stage阶段划分作用&#xff1f;Spark为什么比MapReduce快&#xff1f;DAG Spark的核心是根据RDD来实现的&#xff0c;…

cubemx stm32 lu90614模块 人体温度检测模块 可以替代温枪 驱动代码

lu90614 使用串口通信在&#xff0c;指值得注意的是&#xff0c;他的TX接单片机的TX&#xff0c;RX接单片机的RX&#xff0c;和其他的串口设备不一样。 模式切换包 lu90614有两种模式&#xff0c; 一个是物温模式&#xff0c;一个是体温模式&#xff08;检测人体温度用体温…

【CSDN 竞赛—第10期】所有题目解法的思考和总结

目录 一、 熊孩子拜访 二、 走楼梯 三、括号上色 四、喜水青蛙 一、 熊孩子拜访 已知存在一个长度为n的整数序列A。 A中所有元素按照从小到达的顺序进行排序。 现在执行操作倒置一段序列。 请找到A序列里的倒置子序列。 我的解题思路&#xff08;通过所有测试用例&#xff0…

[附源码]java毕业设计星期八酒店管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Opengl ES之PBO

叨叨一句几句 关于Opengl的系列已经有较长的一段时间没有更新了&#xff0c;然而这个系列还远没有到完毕地步&#xff0c;后续至少还有关于Opengl矩阵变换、YUV与RGB互转、Opengl水印贴图、Opengl转场动画等主题文章。 断更的主要原因如果给自己找个借口的话可以说是工作比价…

1100w播放、45w涨粉!黑马UP在B站20天逆袭登顶!

在B站生活区里&#xff0c;“搞笑区”的流量独占鳌头&#xff0c;创作者也是络绎不绝。 为此&#xff0c;B站官方对搞笑内容创作布局了长期的扶持计划&#xff0c;比较热门的两个活动“搞笑新星训练营”、“搞笑研究所”是搞笑内容投稿最多的&#xff0c;至今两个活动已经分别…

动手实践丨基于ModelAtrs使用A2C算法制作登月器着陆小游戏

摘要&#xff1a;在本案例中&#xff0c;我们将展示如何基于A2C算法&#xff0c;训练一个LunarLander小游戏。本文分享自华为云社区《使用A2C算法控制登月器着陆》&#xff0c;作者&#xff1a;HWCloudAI 。 LunarLander是一款控制类的小游戏&#xff0c;也是强化学习中常用的…

C# dll代码混淆加密

目录 一、需求 二、用法 1.新建C#项目 2.开始加密 3.常见的错误 4.添加加密规则 5.导出加密dll 6.调用加密dll 结束 一、需求 C# 项目生成 dll&#xff0c;在反编译工具下&#xff0c;好比皇帝的新装&#xff0c;dll 内部的代码看的一清二楚&#xff0c;在这里推荐一…

关于Cy5.5 alkyne,Cyanine7 alkyne和1628790-37-3,1998119-13-3两者的区别

外观以及性质&#xff1a; Cy5.5 alkyne和Cy7alkyne 都含有荧光基团&#xff0c;其中氰基7的炔烃衍生物&#xff0c;近红外荧光团&#xff0c;Cy7的类似物&#xff0c;Cyanine5.5 alkyne用于点击化学标记的远红外/近红外染料炔烃&#xff0c;炔烃可以通过铜催化的点击化学与多种…

Ubuntu 22.04 一次及其繁琐的 允许 Traceroute 探测漏洞修复之旅

前言&#xff1a;允许 Traceroute 探测是绿盟漏洞扫描器报出来的一个漏洞&#xff0c;如下图&#xff1a; 我的系统是ubuntu 22.04&#xff0c;但由于是用户提供的虚拟机&#xff0c;会有些定制的部分&#xff0c;具体定制了哪部分就不知道了&#xff0c;直接描述问题。 解决问…

【服务器数据恢复】LINUX误删除、误格式化的数据恢复

Linux误删除及误格式化的数据恢复方案针对的文件系统&#xff1a; 1 、基于EXT2/EXT3/EXT4文件系统 &#xff1b; 2 、基于Reiserfs文件系统&#xff1b; 3 、基于Xfs文件系统。 Linux误删除及误格式化的数据恢复解决方案&#xff1a; 一、故障检测&#xff1a; 1、检测是否存在…