- 博客(11)
- 问答 (2)
- 收藏
- 关注
原创 jdbc加载过程为何,如何违反双亲委托机制? 极简表述,看不懂你打我
Class.forName()使用的类加载器是加载调用者的类加载器, 而调用者DriverManager是在rt.jar中被启动类加载的,所以Class.forName()使用的是启动类加载器,但jdbc驱动是需要自己实现的,那么肯定就不会在启动类路径中。快排凑字数,提升文章评分,帮助更多人看到,看懂可以关注我,了解更多大道至简。阅读本文需要掌握双亲委托。...
2022-08-10 10:05:41 200
原创 大道至简之反射
什么是反射?反射操作的是Class类型的对象反射使我们可以在程序运行时获取类信息,动态创建类,获取一个类的成员变量,并调用成员方法,构造方法java有的时候在编译时无法确定类的类型或者某些信息其实应该说成我们故意不将类信息嵌入代码写死,而是写入比如配置文件,从而降低代码耦合这样就不需要改动代码只需要改变配置而获得这些信息的方法就是反射实际应用例子:比如spring在编译时不知道到底要用哪些bean,是运行时通过xml配置或者注解动态获取类型的信息并生成BeanDefinition,接着使用反
2022-03-24 16:58:01 49
原创 InnoDB和MyISAM的区别(简洁描述)
InnoDB和MyISAM的区别:InnoDB支持事务,MyISAM不支持,InnoDB默认每一条sql语句都封装成事务,影响效率,可以将多个sql语句放到begin和commit共同组成一个事务或者关闭事务自动提交来提升速度InnoDB支持外键,MyISAM不支持,.尽量不使用外键,因为外键约束关联会影响插入和删除的性能InnoDB使用聚集索引,其叶子节点直接包含索引和数据,MyISAM使用非聚集索引,叶子节点包含索引和和指向数据的指针,索引和数据是分开的,mysql5.5之后的版本的InnoDB
2021-12-23 11:03:10 821
原创 乐观锁与悲观锁极简洁描述与理解
悲观锁:总是假设最坏的情况,每次拿数据的时候都会上锁,适合写多的情况传统关系型数据库用的比较多,比如行锁,表锁java中synchronnized和ReentrantLock等独占锁就属于悲观锁乐观锁:与悲观锁相反,每次拿数据认为别人不会修改,所以不上锁,但还是会判断一下别人有没有更新数据,适合多读的情况可以使用版本号机制和cas操纵实现乐观锁java的原子类就是通过cas实现的悲观锁适用与于多写,乐观锁适用于多读版本号机制:为数据添加version字段线程读取数据时也会读取versi
2021-12-15 17:00:07 390
原创 AQS极简表述
AbstractQueuedSynchronizer又称抽象队列同步器,简称AQS,它是用来构建锁或其他同步组件的基础框架,ReentrantLock内部就包含了一个AQS对象抽象类的实现类AQS内部有个int类型的变量state,加锁就是将state值通过cas操作从0变为1,并标记加锁线程为自己, 以通过判断当前获得锁的线程是否是自己,如果是对state进行累加,这就是可重入锁的实现原理,如果其它线程获取锁时发现state的值是1,获取锁失败,会加入aqs的同步队列释放锁就是将state变量的.
2021-10-24 16:37:06 56
原创 自旋锁和非自旋锁超简洁描述
自旋锁:是指当一个线程在获取锁失败时将一直循环等待,不断重新获取锁,直到获取到锁才会退出循环,自旋锁会让线程一直处于用户态,不会发生上下文切换,非自旋锁获取锁失败会进入阻塞状态,从而进入内核态上下文切换是非常耗时的,当同步代码块/临界区的内容并不多且并发度不是很高时,使用自选锁可以提高效率,否则使用自旋锁会白白消耗资源...
2021-10-23 09:50:44 336
原创 ThreadLocal简洁总结
ThreadLocal简洁总结1.每个线程Thread都维护了自己的threadLocals变量(类型为ThreadLocal.ThreadLocalMap,它是ThreadLocal的内部静态类),所以在每个线程使用get,set,实际上是对存在自己线程(Thread)的Map进行操作2.ThreadLocalMap其内部维护了一个Entry数组,key为ThreadLocal对象,value即为ThreadLocal相对应的值。3.每个key都弱引用指向threadlocal实例(引用指向的就是实
2021-10-13 15:26:14 87
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人