
Java并发编程
文章平均质量分 92
深入浅出Java并发编程系列
菜菜的后端私房菜
专注Java后端技术栈,热爱工作,热爱生活,关注菜菜,分享更多干货日常哟~
展开
-
以超卖为例✨各种场景下如何防止并发污染数据?
本篇文章以防止商品超卖为案例,从Java层面到中间件层面描述各种场景下用不同的方式来解决并发读写可能引起的数据不一致性问题确保服务一直为单节点时在并发量较少的场景,可以使用本地锁synchronized、Lock,Lock可以超时等待避免大量请求阻塞如果服务一直为单节点时在并发量较高的场景,可以把库存数据放到内存中操作,再异步同步数据库,宕机可能导致部分数据丢失服务目前为单节点,以后可能会增加节点的场景,可以使用MySQL新增版本号字段做乐观锁。原创 2024-07-26 09:09:57 · 475 阅读 · 0 评论 -
Java并发设计的7条原则
对于共享可变数据,如果只读可以使用volatile保证可见性,如果需要写则要使用同步手段过度使用同步手段会导致开销大,尽量在同步区间少做操作并发包下的Executor框架将任务与执行分离,使用线程池管理线程,还有并行stream的fork join框架都优于单独使用线程并发包下的工具使用更简单,了解后尽量使用并发包下的工具对于可能被并发调用的类需要声明线程安全性文档:绝对线程安全、相对线程安全、线程不安全等。原创 2024-07-22 16:18:26 · 278 阅读 · 0 评论 -
10分钟从源码级别搞懂AQS(AbstractQueuedSynchronizer)
本文从小白的视角,使用大量图片和通俗易懂的源码分析来深入浅出的学习AQS,让你10分钟彻底搞懂AQS原创 2023-09-04 09:00:00 · 71 阅读 · 0 评论 -
15000字、6个代码案例、5个原理图让你彻底搞懂Synchronized
本篇文章围绕synchronized,深入浅出的描述CAS、synchronized在Java层面和C++层面的实现、锁升级原理、案例、源码等原创 2023-09-02 09:53:45 · 223 阅读 · 0 评论 -
5个案例和流程图让你从0到1搞懂volatile关键字
本篇文章围绕volatile关键字深入浅出的描述有序性、可见性、原子性、JMM、volatile原理、使用场景、伪共享问题等等原创 2023-08-28 22:49:10 · 135 阅读 · 0 评论 -
Executor框架
文章目录Executor框架Executor简介Executor结构使用Executor整体流程ThreadPoolExecutor详解重要组件SingleThreadExecutorFixedThreadPoolCacheThreadPoolScheduledThreadPoolExecutor详解使用流程实现机制FutureTask详解简介状态实现观看《Java并发编程的艺术》所做笔记Executor框架Executor简介JDK5开始把线程的工作单元和执行机制分离开来Executor是将工作原创 2021-03-19 14:44:39 · 116 阅读 · 0 评论 -
Java中的线程池
文章目录Java中的线程池线程池的创建向线程池提交任务关闭线程池合理配置线程池线程池的监控线程池实现原理观看《Java并发编程的艺术》所做笔记Java中的线程池池化技术线程池,连接池…创建和销毁十分的耗费资源池化技术:事先准备好一些资源,要使用就去池子里拿,用完了要还到池子里去(重复利用)实现复用,降低频繁创建,销毁资源的消耗提高响应速度,提交任务时不用等待创建线程就能立即执行方便管理,控制并发数线程池的创建通过ThreadPoolExecutor创建线程池public Th原创 2021-03-19 14:34:55 · 408 阅读 · 0 评论 -
Java中的并发工具类
文章目录Java中的并发工具类CountDownLatchCountDownLatch的使用CountDownLatch部分源码分析总结CyclicBarrierCyclic Barrier的使用Cyclic Barrier部分源码分析构造器reset()isBroken()getNumberWaiting ()await()总结SemaphoreSemaphore的使用Semaphore部分源码分析构造器acquirereleaseavailablePermitsgetQueueLengthhasQue原创 2021-03-19 09:11:44 · 154 阅读 · 0 评论 -
Java中的原子操作类
文章目录原子操作类原子更新基本类型原子更新数组原子更新引用原子更新字段观看《Java并发编程的艺术》所做笔记原子操作类多线程下更新变量值是不安全的,如果加锁(synchronized)又会降低性能JDK5后提供原子操作类来更新变量 底层采用==CAS==实现原子操作类在java.util.current.atomic包下原子操作类可以分为四大类: 原子更新基本类型,原子更新数组,原子更新引用,原子更新字段(以下类型用法基本相同,可能只举例一个类)原子更新基本类型类名作用原创 2021-03-18 22:11:00 · 107 阅读 · 0 评论 -
Java并发容器和框架
文章目录Java并发容器和框架ConcurrentHashMap的实现原理为什么要使用ConcurrentHashMapJDK7ConcurrentHashMap结构JDK7ConcurrentHashMap初始化JDK7ConcurrentHashMap的操作get操作put操作size操作ConcurrentLinkedQueue的实现原理ConcurrentLinkedQueue结构ConcurrentLinkedQueue初始化ConcurrentLinkedQueue操作入队操作出队操作单线程情况原创 2021-03-18 15:26:04 · 149 阅读 · 0 评论 -
Java中的锁
文章目录Java中的锁Lock接口队列同步器AQS提供的模板方法与可重写方法AQS实现分析同步队列节点属性同步队列基本结构独占式同步状态的获取与释放分析获取源码分析释放源码总结共享式同步状态的获取与释放分析获取源码分析释放源码总结独占式超时获取同步状态分析获取源码与独占式获取同步状态的区别流程图自定义同步组件重入锁实现重进入公平锁与非公平锁的区别读写锁读写锁接口ReadWriteLock读写锁的实现读写锁设计写锁的获取与释放读锁的获取与释放锁降级LockSupport工具Condition接口Conditi原创 2021-03-16 12:50:18 · 141 阅读 · 2 评论 -
Java并发编程基础
文章目录Java并发编程基础线程简介为什么要使用多线程线程优先级线程的状态守护线程启动和终止线程构建线程启动线程终止线程不安全的终止线程安全的终止线程线程间通信volatile与synchronized保证内存可见性等待与通知 机制Thread.join()的使用ThreadLocal的使用源码解析为什么Entry的Key要使用弱引用使用弱引用依旧会造成内存泄漏总结线程应用实例等待超时模式线程池技术Java并发编程基础线程简介进程得到分配的资源, 线程是进程的一部分,同个进程间的线程可以共享这个进程得原创 2021-03-16 09:20:07 · 141 阅读 · 0 评论 -
Java并发模型
文章目录Java内存模型内存模型JMM保证内存可见性交互操作以及注意事项重排序数据依赖性重排序规则先行发生原则观看《Java并发编程的艺术》所做笔记Java内存模型并发编程模型分为: 共享内存并发模型,消息传递并发模型Java是共享内存并发模型,线程间的通信是隐式的局部变量,方法参数,异常处理器参数不属于线程间的共享变量,不受内存模型影响目的: 为了定义程序中各种共享变量访问规则Java内存模型规定:所有的共享变量都存储在主内存中(物理上是虚拟机的一部分)每条线程有自己的工作内存线程的原创 2021-03-16 08:52:57 · 322 阅读 · 1 评论 -
Java并发机制的底层实现原理
文章目录Java并发机制的底层实现原理volatile的实现原理volatile的使用优化synchronized 的实现原理与应用对象头锁的分类锁的升级轻量级锁偏向锁锁的对比原子操作实现原理处理器实现原子操作Java实现原子操作观看《Java并发编程的艺术》所做笔记Java并发机制的底层实现原理volatile的实现原理volatile特性: 其他线程可见性,禁止指令重排序对volatile变量进行写操作时,字节码转化的汇编指令会有Lock 前缀实现原理Lock 前缀指令的作用: 将当前原创 2021-03-15 23:24:22 · 237 阅读 · 1 评论 -
并发编程的挑战
文章目录并发编程的挑战上下文切换概念如何减少上下文切换死锁观看《Java并发编程的艺术》所做笔记并发编程的挑战上下文切换概念上下文切换:线程间的切换线程切换前需要保持该线程的状态,这样下次切换回来的时候可以再加载到这个线程的状态并发编程并不一定快,因为创建线程和上下文切换线程都需要开销,所以在某些情况下,并发执行并不一定快过串行执行如何减少上下文切换避免使用锁: 多线程竞争锁时,会引起上下文切换(比如当前线程没拿到锁,它就挂起该线程,切换)CAS操作: CAS操作是非阻塞式同步,不会使原创 2021-03-15 23:17:28 · 117 阅读 · 2 评论