并发包
文章平均质量分 92
yxh13521338301
只分享干货的码农
展开
-
借鉴秒杀思想设计直播抽奖,将50QPS提升至4W
一、前言先谈谈秒杀的设计思路秒杀业务设计大致分为三块:前端、网关和后端。前端需要动静分离,可以采用第三方文件服务器获取静态资源,减轻CDN带宽压力,提升访问秒杀页面的用户体验。秒杀业务大致都是异步完成,所以需要前端轮训秒杀的请求结果。网关需要对请求进行限流(分布式锁)、保护或者IP黑白名单控制,防止单用户短时间多次请求。后端采用数据库的sql where 库存>0来防止库存超卖,为了减少数据库访问压力,也需要在redis中生成对应库存数量的令牌桶供请求获取(或者在redis记录库原创 2021-10-08 16:12:27 · 992 阅读 · 2 评论 -
JDK定时线程池源码解读
最近在研究线程池的底层原理时,忽然想起来之前遇到的一个面试题:“你可以自己手写一个可定时的线程池吗?” 转念一想,spring的定时任务不就是干这个的吗?所以当时想的是采用Timer的方式去处理,面试官不是很满意,反问:“Timer的底层有了解过吗?”场面陷入尴尬,犹豫了一会儿,只能红着脸败下阵来。JDK自带的线程池有四种,大家耳熟能详。其中固定长度、缓存以及单例的实现方案对比定时线程池较为简单,大家可以自行研究。本文主要分享记录帝都的雁在研究定时线程池源码时的一些思路和理解。分享之前,需.原创 2020-09-24 15:11:44 · 307 阅读 · 1 评论 -
Synchronized的花花肠子
对于久经沙场的Java老手来说,锁的概念一定如雷贯耳。毕竟,在打赢并发和多线程的战役中,锁可谓举足轻重。伴随技术领域的推进,系统架构逐渐演变为微服务,锁的范围超脱单个JVM的管理,分布式锁开始替代传统JVM锁,崭露头角。凭借自身的灵活和高逼格的技术栈,收到大家的一致追捧。但由浅入深,JVM锁不意味着过时与淘汰,相反,它在众多业务中还是那么不可替代。JVM锁的家族中,Synchronized一骑红尘,广为流传。本文,帝都的雁就来为读者盘点Synchronized的那些花花肠子。(PS:需要有Java对...原创 2020-08-21 16:57:52 · 299 阅读 · 0 评论 -
volatile与JMM的那些恩怨情仇
源于蚂蚁课堂的学习,点击这里查看(老余很给力)一、前言谈起volatile,想必大家最多的影响无非其三大特性:线程可见性、防止指令重排序以及不能保证原子性。当然,初学者对于这些特性多数只能做到死记硬背,应付面试。工作中对于其真正的原理及实现方式,可能甚至还达不到一知半解。而若要对volatile的原理娓娓道来,需要先引入它的老冤家JMM了。二、JMMJMM(Java Memory Model),即Java内存模型。其主要是按照CPU的工作方式,将内存空间模型化。如下图:...原创 2020-08-12 16:16:56 · 417 阅读 · 0 评论 -
线程安全的天选之子ThreadLocal
源于蚂蚁课堂的学习,点击这里查看(老余很给力)一、前言 物欲横流的信息时代下,性能和效率是产品在百花齐放中脱颖而出的致胜法宝。作为软件研发人员,在物理硬件固定的情形中,如何确保程序高效吞吐赫然是必备的看家本领。而提升效率就会涉及老生常谈的多线程处理,那么对于这种高效手段需要注意的线程安全问题,相比很多猿友一定耳濡目染了,今天帝都的雁为大家带来一种线程安全的技术手--ThreadLocal。(PS:需要有JVM垃圾回收、强引用、软引用、弱引用以及虚引用等相关理论基础)二、用...原创 2020-08-07 15:58:21 · 180 阅读 · 0 评论 -
AQS的傀儡之Lock锁
源于蚂蚁课堂的学习,点击这里查看(老余很给力) Java锁的武林纷争中,存在两大阵营。分别是以Synchronized为首的Java内置关键字对象,自动维护锁的持有和释放,还有就是以Lock锁为代表的Java自定义锁。在之前的博文中,帝都的雁已为大家介绍了Synchronized派系的渊源,本文则重点聊聊Lock锁的那些花边新闻。 Lock锁,是Java并发包下的一个类,其API的使用功能在本文不做介绍,感兴趣的读者可自行阅读源码或查阅相关资料。本文重点介绍Lo...原创 2020-09-10 10:47:40 · 433 阅读 · 0 评论