
并发编程
文章平均质量分 94
跟着Mic学架构
谭峰:笔名“MIC”《Spring Cloud Alibaba 微服务原理与实战》、《Java并发编程深度理解及实战》作者。
咕泡教育联合创始人,14年开发架构经验,对分布式微服务、高并发领域有非常丰富的实战经验。
抖音、B站同名【跟着MIC学架构】
展开
-
【面试普通人VS高手系列】什么是服务网格?
今天继续来分享一个有趣的面试题,“什么是服务网格”?服务网格这个概念出来很久了,从2017年被提出来,到2018年正式爆发,很多云厂商和互联网企业都在纷纷向服务网格靠拢。像蚂蚁集团、美团、百度、网易等一线互联网公司,都有服务网格的落地应用。在我看来呢,服务网格是微服务架构的更进一步升级,它的核心目的是实现网络通信与业务逻辑的分离,使得开发人员更加专注在业务的实现上。那么基于这个问题,我们来看看普通人和高手的回答。普通人嗯?内心戏:服务网格?服务网格是什么东西?嗯, 很抱歉,这个问题我不是很.原创 2022-04-23 18:00:00 · 2907 阅读 · 0 评论 -
字节跳动二面,面试官直接问我生产环境下如何监控线程池?还好我看了这篇文章
线程池的监控很重要,对于前面章节讲的动态参数调整,其实还是得依赖于线程池监控的数据反馈之后才能做出调整的决策。还有就是线程池本身的运行过程对于我们来说像一个黑盒,我们没办法了解线程池中的运行状态时,出现问题没有办法及时判断和预警。对于监控这类的场景,核心逻辑就是要拿到关键指标,然后进行上报,只要能实时拿到这些关键指标,就可以轻松实现监控以及预警功能。ThreadPoolExecutor中提供了以下方法来获取线程池中的指标。getCorePoolSize():获取核心线程数。getMaximumPo原创 2021-10-18 18:07:48 · 479 阅读 · 0 评论 -
(十二) ConcurrentHashMap分段锁设计原理
内容目录深度剖析ConcurrentHashMap原理及源码深度分析ConcurrentHashMap中的并发扩容机制ConcurrentHashMap中的分段锁设计原理分段锁设计提高统计元素数量的性能最后一个部分,也是ConcurrentHashMap中设计比较巧妙的地方。我们知道,当调用完put方法后,ConcurrentHashMap必须会增加当前元素的个数,方便在size()方法中获得存储的数据大小。代码的实现如下。final V putVal(K key, V value, boo原创 2021-09-27 10:34:18 · 1005 阅读 · 0 评论 -
(十一) 深度分析ConcurrentHashMap中的并发扩容机制
内容目录深度剖析ConcurrentHashMap原理及源码深度分析ConcurrentHashMap中的并发扩容机制ConcurrentHashMap中的分段锁设计原理深度分析ConcurrentHashMap中的并发扩容机制说到扩容,相比各位读者都不陌生,无非就是创建一个扩容目标大小的数组,把原来老数组中的数据迁移到新数组中来即可,这种方式比较适合在没有多线程并发的场景中完成,但是在ConcurrentHashMap中并没有那么简单,因为在多线程环境下进行扩容时,会存在其他线程同时往集合中原创 2021-09-27 10:33:29 · 2017 阅读 · 0 评论 -
(十)深度剖析ConcurrentHashMap原理及源码
ConcurrentHashMapConcurrentHashMap是JDK1.5引入的一个并发安全且高效的HashMap,简单来说,我们可以认为它在HashMap的基础上增加了线程安全性的保障。实际上,关于HashMap的线程安全问题,各位读者应该有一些了解,在JDK1.7的版本中,HashMap采用的是数组+链表的数据结构来存储数据,在多个线程并发执行扩容时,可能造成环形链导致死循环和数据丢失的情况;在JDK1.8中,HashMap采用数组+链表+红黑树的数据结构来存储数据,优化了1.7版本中数据扩容原创 2021-09-26 18:28:49 · 512 阅读 · 0 评论 -
(九)深入分析AQS实现原理
简单解释一下J.U.C,是JDK中提供的并发工具包,java.util.concurrent。里面提供了很多并发编程中很常用的实用工具类,比如atomic原子操作、比如lock同步锁、fork/join等。从Lock作为切入点我想以lock作为切入点来讲解AQS,毕竟同步锁是解决线程安全问题的通用手段,也是我们工作中用得比较多的方式。Lock APILock是一个接口,方法定义如下void lock() // 如果锁可用就获得锁,如果锁不可用就阻塞直到锁释放void lockInterrup.原创 2021-09-26 14:19:09 · 274 阅读 · 0 评论 -
(八)ThreadLocal的使用及原理分析
什么是ThreadLocalThreadLocal,简单翻译过来就是本地线程,但是直接这么翻译很难理解ThreadLocal的作用,如果换一种说法,可以称为线程本地存储。简单来说,就是ThreadLocal为共享变量在每个线程中都创建一个副本,每个线程可以访问自己内部的副本变量。这样做的好处是可以保证共享变量在多线程环境下访问的线程安全性ThreadLocal的使用没有使用ThreadLoc...原创 2018-12-05 21:33:44 · 290 阅读 · 0 评论 -
(七)Volatile的作用及原理
文章简介分析volatile的作用以及底层实现原理,这也是大公司喜欢问的问题内容导航volatile的作用什么是可见性volatile源码分析volatile的作用在多线程中,volatile和synchronized都起到非常重要的作用,synchronized是通过加锁来实现线程的安全性。而volatile的主要作用是在多处理器开发中保证共享变量对于多线程的可见性。可见性的...原创 2018-12-05 21:33:13 · 266 阅读 · 0 评论 -
(六)synchronized的源码分析
文章简介前面我有文章介绍了synchronized的基本原理,这篇文章我会从jvm源码分析synchronized的实现逻辑,希望让大家有一个更加深度的认识内容导航从synchronized的字节码说起什么是monitor分析synchronized的源码从synchronized的字节码说起由于synchronized的实现是在jvm层面,所以我们如果要看它的源码,需要从字节码...原创 2018-12-05 21:31:58 · 464 阅读 · 0 评论 -
(五)Synchronized原理分析
文章简介synchronized想必大家都不陌生,用来解决线程安全问题的利器。同时也是Java高级程序员面试比较常见的面试题。这篇文正会带大家彻底了解synchronized的实现。内容导航什么时候需要用Synchronizedsynchronized的使用synchronized的实现原理分析什么时候需要用Synchronized想必大家对synchronized都不陌生,主要...原创 2018-12-05 21:31:32 · 209 阅读 · 0 评论 -
(四)Thread.join的作用和原理
文章简介很多人对Thread.join的作用以及实现了解得很少,毕竟这个api我们很少使用。这篇文章仍然会结合使用及原理进行深度分析内容导航Thread.join的作用Thread.join的实现原理什么时候会使用Thread.joinThread.join的作用之前有人问过我一个这样的面试题Java中如何让多线程按照自己指定的顺序执行?这个问题最简单的回答是通过Thre...原创 2018-12-05 21:31:07 · 435 阅读 · 0 评论 -
(三)从jvm层面了解线程的启动和停止
文章简介这一篇主要围绕线程状态控制相关的操作分析线程的原理,比如线程的中断、线程的通信等,内容比较多,可能会分两篇文章内容导航线程的启动的实现原理线程停止的实现原理分析为什么中断线程会抛出InterruptedException线程的启动原理前面我们简单分析过了线程的使用,通过调用线程的start方法来启动线程,线程启动后会调用run方法执行业务逻辑,run方法执行完毕后,线...原创 2018-12-05 21:30:35 · 535 阅读 · 0 评论 -
(二)线程的应用及挑战
文章简介上一篇文章我们了解了进程和线程的发展历史、线程的生命周期、线程的优势和使用场景,这一篇,我们从Java层面更进一步了解线程的使用内容导航并发编程的挑战线程在Java中的使用并发编程的挑战引入多线程的目的在第一篇提到过,就是为了充分利用CPU是的程序运行得更快,当然并不是说启动的线程越多越好。在实际使用多线程的时候,会面临非常多的挑战线程安全问题线程安全问题值的是当多个线...原创 2018-12-05 21:30:02 · 187 阅读 · 0 评论 -
(一)线程的发展历史
专题简介作为一个合格的Java程序员,必须要对并发编程有一个深层次的了解,在很多互联网企业都会重点考察这一块。可能很多工作3年以上的Java程序员对于这一领域几乎没有太多研究。所以在接下来内容中,我会将并发编程整个领域由浅到深做非常全面的分析。内容导航从操作系统的发展了解进程、线程模型线程的优势线程的生命周期线程的应用场景了解进程、线程模型每次学习一个新技术,建议先去了解这...原创 2018-12-05 21:20:39 · 382 阅读 · 0 评论