首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
有一首歌叫瓜牛
掘友等级
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
3
文章 3
沸点 0
赞
3
返回
|
搜索文章
最新
热门
Mybatis源码解析(三) -- 动态代理与语句执行
这一章节分析动态代理执行sql的具体流程。 在第一章的时候我们已经简单介绍过动态代理,现在我们详细来解析一下mybatis是怎么操作的。这是简单Demo.沿用了第一章的例子,用来查询User类。 当我们调用sqlSession.getMapper时,返回的就已经是一个代理对象了…
Mybatis源码解析(二) -- xml配置文件解析
在SqlSessionFactoryBuilder中有一个build方法入口,用来解析配置文件。 这里传入配置文件的输入流,也能使用不同的解析方式,传入对应的环境,或者具体的参数。 在这之后,它会创建一个XML解析器来解析xml文件。调用parse()方法。parse()会返回…
Mybatis源码解析(一) -- 动态代理,拦截器及架构分析
在学习Mybatis之前我们需要先回顾以下如何使用jdbc连接数据库,下面是一个简单的例子。 例如我们这里有一张user表,表里面有两个字段。 那么要当我们在数据库中查询出一条User记录时,我们要把它封装到一个User对象中,方便使用。 现在我们使用jdbc来对User表进行…
ReentrantLock源码解析--解锁过程
对于ReentrantLock来说,无论公平锁还是非公平锁,它的解锁过程都是相同的,这里我已非公公平锁进行举例。 当调用lock.unlock时,解锁就开始。解锁的具体执行类同样也是Sync这个继承了AQS的内部类。 在加锁过程中我们分析过,ReentrantLock中有个st…
synchronized深度解析--重量级锁
例1: 这里创建了两个线程t1,t2,并让他们执行去竞争对象a的锁,并打印对象a的对象头,然后等待t1,t2执行完毕后,再次打印对象a的头部信息。 从输出结果我们可以看出,当t1和t2同时竞争对象a的锁时,a会膨胀为重量级锁。 然而这并不是说jvm直接给了对象a一把重量级锁。结…
synchronized深度解析--轻量级锁
使用jvm参数-XX:-UseBiasedLocking来关闭偏向锁。 例1: 这里关闭了偏向锁,来直接打打印在同步代码块执行中,和执行后对象头mark word的变化。 回顾前文我们可以知道,当对象头为偏向锁时所标志位为00,指针指向堆栈上的实际头。 jvm的偏向锁开启有延迟…
synchronized深度解析--偏向锁
如果对象是刚创建的,那么是什么状态呢。在之前的输出可以找到,标志这baised_lock和lock是001,表示的是unlocked,也就是解锁状态。但是我们在文档Synchronization and Object Locking上的图可以看出,新生的对象状态会有两种可能。 …
synchronized深度解析 -- 引言
下面代码块是很常用的两种加锁方式。 我在ReentrantLock源码解析--加锁过程中有说过,ReentrantLock通过state关键字,记录锁重入的次数,还会记录当前持有锁的线程和使用双向链表来记录排队线程。那么synchronized是如何实现加锁过程呢?他是否有类似…
ReentrantLock源码解析--加锁过程
当我们使用带参数的造器生成ReentrantLock时,由于传入是true所以会生成一个公平锁的内部类对象。 无论是公平锁还是非公平锁都继承了ReentrantLock中Sync这个静态内部类对象,而这个对象又继承了AbstractQueuedSynchronizer(以下简称…
个人成就
文章被点赞
25
文章被阅读
7,898
掘力值
389
关注了
7
关注者
7
收藏集
1
关注标签
11
加入于
2020-06-11