5 葵续浅笑

尚未进行身份认证

争取每天都有进步!

等级
TA的排名 3w+

CyclicBarrier自旋改造

前言最近java的concurrent库学习的热火朝天,有以悲观锁为代表,AQS运用的如火纯青的LinkedBlockingQueue,ArrayBlockingQueue。也有乐观锁为代表,把CAS+自旋演示的出神入化的ConcurrentLinkedQueue。当然还有像ReentrantReadWriteLock为代表,犹如教科书般的独占锁+共享锁实际运用。总之一句话,D...

2019-07-12 17:48:14

聊聊ReentrantLock的锁设计

前言之前看过美团的一篇不可不说的Java“锁”事,对java锁的概念做了一次梳理,其实在java类中,ReentrantLock算是一个对锁概念运用的典范,看懂它的源码对锁的理解很有帮助。我也以ReentrantLock为原型,略加改动使之能在分布式环境中运行。幕后功臣AQS当我们看第一眼ReentrantLock源码,里面有一个Sync对象,它继承AbstractQueuedSynchro...

2019-06-18 14:35:42

记一次OOM排查过程(入门版)

第一次线上遇到问题,最近也在学jvm,记录一下,算是一个入门版jvm故障排查,希望能给新手带来一点干货。背景机器(2c8g)默认jvm部分关键参数配置:Xmx最大堆内存Xms最小堆内存UseG1GC使用G1垃圾回收器PrintGCDetails/PrintGC打印GC详细日志HeapDumpOnOutOfMemoryError这个是故障排查关键,会在OOM的时候生成...

2019-06-06 10:43:14

深入理解Java内存模型(七)-- 总结

很棒的一个关于Java内存模型系列文章转载自并发编程网–ifeve.com本文链接地址:深入理解java内存模型系列文章因文章有些配图已经不完整,所以通过快照找到原图,并在本人博客中做转载保存。处理器内存模型顺序一致性内存模型是一个理论参考模型,JMM和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完...

2019-06-01 17:10:34

深入理解Java内存模型(六)-- final

很棒的一个关于Java内存模型系列文章转载自并发编程网–ifeve.com本文链接地址:深入理解java内存模型系列文章因文章有些配图已经不完整,所以通过快照找到原图,并在本人博客中做转载保存。增强的final语义与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则:在构造函数内对一个fina...

2019-06-01 16:51:45

深入理解Java内存模型(五)-- 锁

很棒的一个关于Java内存模型系列文章转载自并发编程网–ifeve.com本文链接地址:深入理解java内存模型系列文章因文章有些配图已经不完整,所以通过快照找到原图,并在本人博客中做转载保存。锁的释放-获取建立的happensbefore关系锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。下面是锁释放-获取的...

2019-06-01 16:03:53

深入理解Java内存模型(四)-- volatile

很棒的一个关于Java内存模型系列文章转载自并发编程网–ifeve.com本文链接地址:深入理解java内存模型系列文章因文章有些配图已经不完整,所以通过快照找到原图,并在本人博客中做转载保存。volatile的特性当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个锁对...

2019-06-01 15:36:52

深入理解Java内存模型(三)-- 顺序一致性

很棒的一个关于Java内存模型系列文章转载自并发编程网–ifeve.com本文链接地址:深入理解java内存模型系列文章因文章有些配图已经不完整,所以通过快照找到原图,并在本人博客中做转载保存。数据竞争与顺序一致性保证当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下:在一个线程中写一个变量,在另一个线程读同一个变量,而且写和读没有通过同步来排序...

2019-06-01 14:51:41

深入理解Java内存模型(二)-- 重排序

很棒的一个关于Java内存模型系列文章转载自并发编程网–ifeve.com本文链接地址:深入理解java内存模型系列文章因文章有些配图已经不完整,所以通过快照找到原图,并在本人博客中做转载保存。数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型:名称...

2019-06-01 14:31:00

深入理解Java内存模型(一)-- 基础

很棒的一个关于Java内存模型系列文章转载自并发编程网–ifeve.com本文链接地址:深入理解java内存模型系列文章因文章有些配图已经不完整,所以通过快照找到原图,并在本人博客中做转载保存。提纲java线程之间的通信对程序员完全透明,内存可见性问题很容易困扰java程序员,本文试图揭开java内存模型神秘的面纱。本文大致分三部分:重排序与顺序一致性;三个同步原语(lock,vo...

2019-06-01 12:50:28

Redis的用武之处--由短信限流引出的分布式锁和漏斗限流(下)

分布式锁有些人应该用过Redission这个redis中间件框架,它以使用者忘记redis本身命令,而更多关注业务为目标,所以它的api不同于jedis,redission就原生提供了分布式锁,限流器等现成的工具类。我以重复"造轮子"为宗旨,试着写写这个分布锁。上一篇我们知道光一个漏斗限流在生产环境是不行的,容易因为并发导致出现问题,我们需要给这个限流器上一把锁,先贴流程图/代码:这把锁...

2019-04-27 16:30:26

Redis的用武之处--由短信限流引出的分布式锁和漏斗限流(上)

需求项目有一个群发短信提醒的模块,这种东西做出来就需要谨慎,要做好单位时间限流,不然因为bug而导致短信发送失控那就不得了了,

2019-04-27 14:14:37

代理模式及FactoryBean的实际运用--Mybatis Mapper文件的华丽转身

Mybatis的Mapper我们很熟悉,我们只需要提供sql和一个接口,其余与数据库的交互全部交给了Mybatis解决,但是,mapper文件我们只提供一个接口,这个接口是怎么和spring结合完成我们预期的要求?FactoryBean一般情况下,Spring通过反射机制利用的class属性指定实现类实例化Bean,在某些情况下,实例化Bean过程比较复杂,如果按照传统的方式,则需要在中提供大...

2019-03-06 11:01:48

【基本功】不可不说的Java“锁”事--转自美团技术博客

前言Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录:乐观锁V...

2019-03-04 15:16:03

spring之我见--从Filter机制看设计模式(责任链模式,装饰器模式)

最近为公司一个项目写一个简单的网关,其实也就是一个filter做一些token解析/校验。但是光这一个filter就不简单,现在就说说里面运用的设计模式。Filter的核心-责任链模式Filter:属于javaweb中一个重要的组件,对请求资源进行处理(request和response)。FilterChain:管理着所有filter的顺序和执行,就像一个链条。通过这种链式串联,我们就...

2019-02-16 16:53:29

spring之我见--spring boot的组件化(以logging日志初始化为例)

之前写了java的多级缓存,是一个简单的util工具包,想着能不能跟springboot做集成,顺便了解下springboot组件原理,比如众多的xx-spring-boot-starter.这篇文章以springboot2.x为基础。如何读取配置文件这个是面临的第一个问题,以logging日志的集成为例。我们都知道logging日志的配置可以配置以"logging.leve...

2019-01-03 21:45:33

实现简单的JAVA多级缓存(Caffeine + redis)

需求好久没写文章啦,之前写的文章到现在也没有收尾,没办法,时间不多啊,旧坑没有填完就开始开新坑,最近项目组长说实现一个多级缓存,通常我们喜欢把cache放到redis里,可以把访问速度提升,但是redis也算是远程服务器,会有IO时间的开销,如果我们把缓存放在本地内存,性能能进一步提升,这也就带出了二级缓存概念。有人说为什么不把cache直接放到本地,如果是单机没问题,但是集群环境下还是需要两级...

2018-10-18 18:59:31

从一个业务看待 InnoDB事务,InnoDB数据库锁,同步的关系

起因写这篇文章的起因在于现在公司的一个”激活学习卡“业务,激活的接口是其它组提供(你只需要给接口”卡号“和”激活的人“),而分配哪张卡号是自己来写,关键是这个卡号是从一个表里每次去选一个。用sql语句每次limit1去捞取一条,但是这里面就出现了资源占用问题,sql语句每次limit1都是同一条,除非你已经使用(改变这条数据的状态)。一开始想到事务,但是越想越不对劲(后面还是用锁同步机...

2018-07-01 23:06:44

熟悉又陌生的跨域访问与CORS

说到跨域访问,是既熟悉又陌生,熟悉是因为只要做过web项目,尤其是前后端分离的项目,都碰到过ajax跨域访问的麻烦,跨域访问就如字面意思,只要协议、域名、端口有任何一个不同,都被当作是不同的域。对于跨域访问,是有限制的;陌生的是,很多跨域无法访问的问题只能一味网上找解决方案,而不知道跨域乃至CORS的原理,配置出了问题不知道如何下手,所以这次记录一下彻底解决下跨域的问题。为什么要有跨域限制...

2018-05-28 19:07:08

Maven实战-maven中的可选依赖(optional)

在一些项目中,我们知道用exclusion排除一些依赖包,这属于依赖排除(DependencyExclusions),还有一种就是今天所说的可选依赖(OptionalDependencies)。主要还是讲怎么用。准备工作准备两个工程,简单点,就是A和B只看POM文件,这是A的pom文件。<?xmlversion="1.0"encoding="UTF-8"?>...

2018-05-11 16:21:44

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。