
Java并发
文章平均质量分 94
并发编程
码农参上
这个作者很懒,什么都没留下…
展开
-
MyBatis-Plus联表查询的短板,终于有一款工具补齐了
mybatis-plus作为mybatis的增强工具,它的出现极大的简化了开发中的数据库操作,但是长久以来,它的联表查询能力一直被大家所诟病。一旦遇到左右连接,你还是得老老实实的打开xml文件,手写上一大段的sql语句,今天就来看看这款工具如何应对吧。......原创 2022-07-25 10:52:09 · 1110 阅读 · 0 评论 -
没想到吧,Spring中还有一招集合注入的写法
Spring作为项目中不可缺少的底层框架,提供的最基础的功能就是的管理了。的注入相信大家都比较熟悉了,但是有几种不太常用到的集合注入方式,可能有的同学会不太了解,今天我们就通过实例看看它的使用...原创 2022-07-06 11:21:27 · 246 阅读 · 0 评论 -
源码级深挖AQS队列同步器
我们知道,在java中提供了两类锁的实现,一种是在jvm层级上实现的synchrinized隐式锁,另一类是jdk在代码层级实现的,juc包下的Lock显示锁,而提到Lock就不得不提一下它的核心队列同步器(AQS)了,它的全称是AbstractQueuedSynchronizer,是用来构建锁或者其他一些同步组件的基础,除了ReentrantLock、ReentrantReadWriteLock外,它还在CountDownLatch、Semaphore以及ThreadPoolExecutor中被使用,通过原创 2021-04-13 09:00:33 · 178 阅读 · 0 评论 -
再谈synchronized锁升级
在图文详解Java对象内存布局这篇文章中,在研究对象头时我们了解了synchronized锁升级的过程,由于篇幅有限,对锁升级的过程介绍的比较简略,本文在上一篇的基础上,来详细研究一下锁升级的过程以及各个状态下锁的原理。本文结构如下:文章目录1 无锁2 偏向锁2.1 偏向锁原理2.2 偏向锁升级2.3 批量重偏向2.4 批量撤销2.5 总结3 轻量级锁3.1 轻量级锁原理3.2 轻量级锁重入3.3 轻量级锁升级3.4 总结4 重量级锁4.1 Monitor4.2 重量级锁原理总结1 无锁在上一篇文章中原创 2021-04-12 09:09:15 · 267 阅读 · 1 评论 -
图文详解Java对象内存布局
作为一名Java程序员,我们在日常工作中使用这款面向对象的编程语言时,做的最频繁的操作大概就是去创建一个个的对象了。对象的创建方式虽然有很多,可以通过new、反射、clone、反序列化等不同方式来创建,但最终使用时对象都要被放到内存中,那么你知道在内存中的java对象是由哪些部分组成、又是怎么存储的吗?本文将基于代码进行实例测试,详细探讨对象在内存中的组成结构。全文目录结构如下:文章目录1、对象内存结构概述2、JOL 工具简介3、对象头3.1 Mark Word 标记字3.1.1 锁升级3.1.2 其他原创 2021-04-03 08:51:06 · 1147 阅读 · 1 评论 -
Mybatis自定义拦截器与插件开发
在Spring中我们经常会使用到拦截器,在登录验证、日志记录、性能监控等场景中,通过使用拦截器允许我们在不改动业务代码的情况下,执行拦截器的方法来增强现有的逻辑。在mybatis中,同样也有这样的业务场景,有时候需要我们在不侵入原有业务代码的情况下拦截sql,执行特定的某些逻辑。那么这个过程应该怎么实现呢,同样,在mybatis中也为开发者预留了拦截器接口,通过实现自定义拦截器这一功能,可以实现我们自己的插件,允许用户在不改动mybatis的原有逻辑的条件下,实现自己的逻辑扩展。那么,在实现拦截器之前,首原创 2021-03-31 08:46:56 · 1459 阅读 · 0 评论 -
OAuth2.0授权码模式实战
OAuth2.0是目前比较流行的一种开源授权协议,可以用来授权第三方应用,允许在不将用户名和密码提供给第三方应用的情况下获取一定的用户资源,目前很多网站或APP基于微信或QQ的第三方登录方式都是基于OAuth2实现的。本文将基于OAuth2中的授权码模式,采用数据库配置方式,搭建认证服务器与资源服务器,完成授权与资源的访问。流程分析在OAuth2中,定义了4种不同的授权模式,其中授权码模式(authorization code)功能流程相对更加完善,也被更多的系统采用。首先使用图解的方式简单了解一下它的原创 2021-03-30 08:50:07 · 4538 阅读 · 1 评论 -
Java请求合并与分而治之
在系统设计的时候,你是否也遇到过这两个问题:1、大量请求造成数据库压力过大2、大量数据库查询造成请求执行时间过长本文将介绍在高并发、大数据环境下,以上两种问题的应对思路。一、请求合并首先思考一个场景,在高并发的系统中,在每秒内有大量的请求要访问数据库,如果不考虑缓存,怎么才能够处理降低数据库压力。有的同学可能会说这多简单啊,增加带宽,加内存提升服务器性能。如果不用这些...原创 2020-04-12 19:26:56 · 2833 阅读 · 1 评论 -
Java并发编程基础盘点3 - CAS
CAS(Compare and Swap),中文可以理解为比较并替换,是一种实现并发算法时常用到的技术。它是一种无锁原子算法,CAS是一种乐观锁的实现方式,在操作时是抱着乐观的态度进行的,它总是认为可以成功完成操作。让我们先直观的理解一下CAS的大体思路:CAS(V,E,N)它包含 3 个参数,V表示要更新变量的值,E表示预期值,N表示新值。仅当 V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做过更新,则当前线程则什么都不做。最后,CAS 返回当前V的真实值。原创 2020-05-09 15:38:00 · 268 阅读 · 0 评论 -
Java并发编程基础盘点2-单例模式
单例模式是一种常见的设计模式,在这个模式下,单例对象的类必须保证只有一个实例存在,并提供返回实例对象的方法。在日常工作中,线程池、缓存、日志等对象通常被设计成单例模式,一方面减少了频繁创建销毁对象用以提升性能,另一方面避免了对共享资源的多重占用并简化了访问。那么在高并发、多线程的环境下,是如何确保多个线程操作的是同一对象,也就是说保证对象的唯一性呢?这时就要用到单例模式,来确保实例化过程...原创 2020-05-07 21:36:14 · 221 阅读 · 0 评论 -
Java并发编程基础盘点(一)
在Java并发编程中,互斥性与可见性是两个非常重要的概念,本文将通过介绍synchronized和volatile关键字的使用,对并发环境下的互斥性与可见性的实现进行总结。首先来看一下它们的概念:互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块(复合操作)进行访问。互斥性我们也往往称为操作的原子性。可见性...原创 2020-04-26 20:46:35 · 261 阅读 · 0 评论