- 博客(5)
- 收藏
- 关注
原创 mybatis源码剖析
mybatis源码剖析 mybatis开发demo InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml"); //获取SqlSessionFactoryBuilder SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); //解析配置文件,获得SqlSessionFactory SqlSessionFactory sql
2021-05-06 16:35:31 68
原创 Mybatis的一级缓存和二级缓存
Mybatis的一级缓存和二级缓存 作用域 一级缓存的作用域是session 二级缓存的作用域是namespace 一级缓存 一级缓存交于Executor维护的,在BaseExecutor下有一个PerpetualCache类型的属性,这个就是一级缓存。因为每一个SqlSession都有一个Executor,即代表着,每一个Session都有着独立的一级缓存PerpetualCache。 当用户发起查询请求时,是SqlSession会先去缓存中查找,如果有数据就返回数据,如果,没有就再去数据库查找。 但是,
2021-05-05 20:48:30 102
原创 JAVA并发之ConcurrentHashMap源码分析
JAVA并发之ConcurrentHashMap源码分析 HashMap并不能在多线程下保证数据安全,为了适应并发场景JUC包下提供了ConcurrentHashMap。 ConcurrentHashMap与HashMap比较相似,底层都是数组+链表+红黑树。其最大区别体现在put方法中。 保证HashMap的线程安全,就是保证hashMap的数据的线程安全,其数据包括、底层维护的数组、链表、红黑树以及map的size的线程安全。带着这个思路,可以很清楚地看懂ConcurrentHashMap源码。 Con
2021-04-26 23:58:35 130 2
原创 Java并发之lock源码分析
Java并发之lock源码分析 程序员自己管理锁的释放 lock()方法 final void lock() { //判断当前锁的状态,即STATE的是否为0,如果是0的话就将state改为1,表示当前锁空闲,当前线程抢占成功 if (compareAndSetState(0, 1)) //将当前线程记录 setExclusiveOwnerThread(Thread.currentThre
2021-04-25 17:12:59 87
原创 java并发之volatile
多线程之volatile 作用:保证变量的可见性 可见性问题的由来: 由于CPU比内存以及磁盘的速度快得多,CPU操作一个变量需要等到内存、磁盘读取成功。这时的CPU会死等在这里,极大的影响了CPU利用率。为了解决这个问题、硬件工程师先是增加了高速缓存,事先让一些常用变量加载到高速缓存中,这样CPU就不需要等待内存加载成功,这样提高了CPU的利用率,但是体验还是不行。为了提升CPU的利用率,发明了线程,在CPU死等的时候去运行其他的内容,极大地利用了CPU资源。但是工程师没有满足,为了得到更快的运行效率,提
2021-04-23 15:49:14 81
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人