![](https://img-blog.csdnimg.cn/20210223135601729.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
死磕并发编程
文章平均质量分 91
本专栏旨在解析并发编程、框架源码以及大厂中比较有意思的面试题, 希望大家能够通过专栏有所收获
马丁不会代码
如何简洁编码?
展开
-
1.1w字,10图彻底掌握阻塞队列(并发必备)
前言什么是队列队列是一种先进先出的特殊线性表,简称 FIFO。特殊之处在于只允许在一端插入,在另一端删除进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列队列在程序设计中使用非常的多,包括一些中间件底层数据结构就是队列文章首发自公众号:【源码兴趣圈】,微信搜索关注这个高质量原创技术,定期分享高并发、中间件、分布式、框架源码等知识点什么是阻塞队列队列就队列呗,阻塞队列又是什么鬼阻塞队列是在队列的基础上额外添加两个操作的队列,分别是:支持阻塞的插.原创 2021-01-07 18:42:03 · 466 阅读 · 1 评论 -
面试:如何通过 MyBatis 查询千万数据并保证内存不溢出?
由于现在 ORM 框架的成熟运用,很多小伙伴对于 JDBC 的概念有些薄弱,ORM 框架底层其实是通过 JDBC 操作的 DBJDBC(JavaDataBase Connectivity)是 Java 数据库连接, 说的直白点就是使用 Java 语言操作数据库由 SUN 公司提供出一套访问数据库的规范 API, 并提供相对应的连接数据库协议标准, 然后 各厂商根据规范提供一套访问自家数据库的 API 接口文章大数据量操作核心围绕 JDBC 展开,目录结构如下:MySQL JDBC 大数据量操作.原创 2021-01-04 10:40:06 · 8451 阅读 · 6 评论 -
万字图文 | 聊一聊 ReentrantLock 和 AQS 那点事(看完不会你找我)
男生魅力最重要的部分,是有勇气面对失败;而生活的美好之处,恰恰在于它的不确定性前言AbstractQueuedSynchronizer(AQS)是 Java 并发编程中绕不过去的一道坎,JUC 并发包下的 Lock、Semaphore、ReentrantLock 等都是基于 AQS 实现的。AQS 是一个抽象的同步框架,提供了原子性管理同步状态,基于阻塞队列模型实现阻塞和唤醒等待线程的功能文章从 ReentrantLock 加锁、解锁应用 API 入手,逐步讲解 AQS 对应源码以及相关隐含流..原创 2020-11-18 00:03:16 · 8270 阅读 · 4 评论 -
【剑指Offer】面试官问如何解决 AtomicInteger “ABA“ 问题
前言上一篇文章 《通过 JDK 原子并发类 AtomicInteger 彻底掌握 CAS 无锁算法》和大家聊了聊 Atomic 相关的概念, 也说了下 AtomicInteger 的实现原理同时也说了 Atomic 的不足:1、多线程高并发对共享资源读写操作会导致自旋过度2、“ABA” 问题今天这篇文章就来聊一聊如何解决 “ABA” 问题ABA 问题背景AtomicInteger 存在的一个问题, 也是大部分 Atomic 相关类存在的, 就是 ABA 问题简短来说, 就是线程一获取..原创 2020-10-03 13:49:32 · 1158 阅读 · 1 评论 -
【剑指Offer】通过 JDK 原子并发类 AtomicInteger 彻底掌握 CAS 无锁算法
前言如果要聊原子类相关的话题, 可以先从基本的概念开始1、原子类为了解决什么样的问题?答: 为了解决并发场景下无锁的方式保证单一变量的数据一致性2、什么情况下存在并发问题?答: 多个线程同时读写同一个共享数据时存在多线程并发问题解决并发安全问题的方式有很多种方式, 著名的就是 JDK 并发包 concurrent, 为了并发而存在的非原子计算大家应该都知道, 类似于代码中的 i++ 操作, 虽然是一行, 但是执行时候是分为三步的从主存获取变量 i变量i值+1新增后变量i值写.原创 2020-10-01 10:27:38 · 824 阅读 · 0 评论 -
【剑指Offer】一文掌握 Redisson 分布式锁原理(值得收藏)
ReentrantLock 重入锁在说 Redisson 之前我们先来说一下 JDK 可重入锁: ReentrantLockReentrantLock 保证了 JVM 共享资源同一时刻只允许单个线程进行操作实现思路ReentrantLock 内部公平锁与非公平锁继承了 AQS[AbstractQueuedSynchronizer]1、AQS 内部通过 volatil 修饰的 int 类型变量 state 控制并发情况下线程安全问题及锁重入2、将未竞争到锁的线程放入 AQS 的队列中通过 L...原创 2020-09-26 23:24:07 · 3006 阅读 · 1 评论 -
【剑指Offer】Redis 分布式锁的实现原理看这篇就够了
前言分布式锁相信大家一定不会陌生, 想要用好或者自己写一个却没那么简单想要达到上述的条件, 一定要 掌握分布式锁的应用场景, 以及分布式锁的不同实现, 不同实现之间有什么区别分布式锁场景如果想真正了解分布式锁, 需要结合一定场景; 举个例子, 某夕夕上抢购 AirPods Pro 的 100 元优惠券如果使用下面这段代码当作抢购优惠券的后台程序, 我们一起看一下, 可能存在什么样的问题很明显的就是这段流程在并发场景下并不安全, 会导致优惠券发放超过预期, 类似电商抢购超卖问题想一哈有什.原创 2020-09-26 17:13:21 · 9638 阅读 · 17 评论 -
【剑指Offer】JDK 线程池使用不当引发的饥饿死锁问题
01、前言使用线程池时会忽略死锁问题, 但是只要代码写的"六"没啥是不可能的文章代码及部分理念引自 线程池使用不当也会死锁02、什么是死锁死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程死锁定义来源: 死锁-百度百科简化来说就是: 一组相互竞争资源的线程因为互相等待,导致"永久"阻塞的现象我们通过一个 Demo 简单理解下publi原创 2020-09-18 23:28:26 · 816 阅读 · 0 评论 -
【剑指Offer】谨慎使用 Java8 新特性 ParallelStream并行流
01、前言在说 parallelStream 之前, 一定要了解 Stream 以及它的基本操作推荐大家看一波之前的文章 解放双手,Stream 居然还有这波神操作02、什么是 ParallelStream上文讲到的 Java8 Stream 流在执行时候是串行化的, 如果说任务执行的耗时比较长, 可以使用 Stream 的 “兄弟流” ParallelStream防止误导, 并非耗时就一定要使用并行, 根据不同的业务场景, 合理的使用即可parallelStream 是一种并行流, 意思为原创 2020-09-17 10:07:25 · 2034 阅读 · 2 评论 -
【剑指Offer】如何处理 JDK 线程池内线程执行异常
前言上次写了 【剑指 Offer】如何解决 JDK 线程池中不超过最大线程数下快速消费任务宽哥瞅了后没有被怼, 心想不枉我上周天看了一天的线程池源码啊 ????场景太过温馨, 必须记录下来不过还好, 后面没有像往常一样被怼 ????️言归正传哈, 本篇 《如何处理 JDK 线程池内线程执行异常》 文章适合哪些小伙伴阅读呢工作中使用线程池却不知异常的处理流程, 以及不知如何正确处理抛出的异常带着问题看文章1、线程池如何输出打印运行任务时抛出的异常?2、线程池 execute()、sub原创 2020-09-14 09:56:41 · 754 阅读 · 0 评论 -
【剑指Offer】JDK 线程池如何保证核心线程不被销毁
前言很早之前那个时候练习线程池, 就是感觉线程池类似于 ArrayList 这种集合类结构, 将 Thread 类存储, 来任务了就进行消费, 然鹅…线程包装类线程池并不是对 Thread 直接存储, 而是对 Thread 进行了一层包装, 包装类叫做 Worker线程在线程池中的存储结构如下:private final HashSet<Worker> workers = new HashSet<Worker>();先看一下 Worker 类中的变量及方法privat原创 2020-09-10 23:24:36 · 1368 阅读 · 1 评论 -
【剑指Offer】如何解决JDK线程池中不超过最大线程数下快速消费任务
前言文章需要对线程池执行任务流程有一定的了解记得之前我写通过模版设计来解决 线程池参数自定义痛点, 然后宽哥在下面灵魂发问, 也就是咱们这篇文章讲到的重点来来来, 我给大家复制粘贴出来如何解决 JDK 线程池中不超过最大线程数下即时快速消费任务, 而不是在队列中堆积因为最近业务落地改造中需要线程池, 又去看了一遍源码, 防止线上埋雷, 也再次回顾了这个问题然后发现网上也有这种问题提问, 虽然是不同的提问, 但是核心思想是一致的, 点击跳转业务是多变的, 而 JDK 中的线程池消费流程原创 2020-09-10 23:23:38 · 965 阅读 · 0 评论 -
【剑指Offer】一文搞懂项目使用的 Mybatis 架构设计(值得收藏)
Mybatis 架构设计分享1、带着问题思考本次分享2、持久层的那些事2.1 JDBC什么是 JDBCJDBC 原理2.2 Mybatis什么是 MybatisMybatis 与 JDBC 的关系3、Mybatis 关键词说明SqlSessionSqlSessionFactorySqlSessionFactoryBuilderConfigurationMappedStatementExecutorParameterHandlerStatementHandlerResultSetHandlerIntercep原创 2020-09-03 21:19:26 · 806 阅读 · 1 评论