摘要: Condition condition.await() > aqs.await():1、先addConditionWaiter(),把当前节点加入到Condition队列中(等待队列),waitStatus=-2,这个入队的流程和AQS有些类似,但是这里没有空的头结点,入队的线程节点自身就是头结点, 阅读全文
posted @ 2020-07-12 20:10 挣扎一下 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 从Lock讲起 Lock:一个接口,定义了在jdk层面上灵活实现锁的一种方式。 实现该接口的类是ReentrantLock。ReentrantLock这个单词的翻译是重入锁。 重入锁 持有锁的线程可以再次获取锁,增加重入次数,释放的锁时候也要将次数减为0。synchronized和Reentrant 阅读全文
posted @ 2020-07-12 15:33 挣扎一下 阅读(248) 评论(0) 推荐(0) 编辑
摘要: Volatile关键字 保证线程间共享变量的可见性、有序性。 如何保证可见性:多了一个Lock的汇编指令。 什么是可见性 硬件 运行速度:CPU > 内存 > IO设备;所以在硬件的使用中,为了提高效率 CPU增加了高速缓存 读数据时,从内存读,然后缓存到CPU缓存,线程修改变量时会先同步到缓存,再 阅读全文
posted @ 2020-07-11 16:28 挣扎一下 阅读(162) 评论(0) 推荐(0) 编辑
摘要: wait & notify/notifyAll 通过之前的文章,https://www.cnblogs.com/fcb-it/p/13282740.html 我们已经知道了重量级锁会存在等待队列和阻塞队列,这两个队列是做什么用的呢? 阻塞队列:BLOCKED状态的线程会在该队列,当发现锁可用时,线程 阅读全文
posted @ 2020-07-11 11:25 挣扎一下 阅读(145) 评论(0) 推荐(0) 编辑
摘要: synchronize的使用场景 线程安全问题:多线程对共享数据状态的访问没有控制 用锁(互斥)来控制对共享数据的访问 synchronized是虚拟机级别提供给我们的同步关键字 synchronized的使用 1、修饰实例方法(锁是当前对象) 2、修饰静态方法(锁是当前类的字节码对象) 3、修饰代 阅读全文
posted @ 2020-07-11 10:44 挣扎一下 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 线程中的Interrupt 线程中存在volatile变量Interrupt,用来标记是否中断。 线程中存在对应的isInterrupted()方法,默认是false。调用thread.interrupt()会把isInterrupted()设置成true。 线程的中断和复位 调用thread.in 阅读全文
posted @ 2020-07-10 00:01 挣扎一下 阅读(650) 评论(0) 推荐(0) 编辑
摘要: 为什么需要多线程 单核CPU->多核CPU->并行计算 实时性需求->线程是轻量级的进程,任务调度的最小单位,资源消耗比进程低 充分利用CPU资源,提升吞吐量 线程在Java中的应用 四种方式创建多线程: 继承Thread类(本质上是实现了Runnable接口) 实现Runnable接口扔到Thre 阅读全文
posted @ 2020-07-09 22:46 挣扎一下 阅读(129) 评论(0) 推荐(0) 编辑
摘要: SqlSessionFactory何时创建 容器启动时创建 能否直接使用DefaultSqlSession 不能,因为该类不是线程安全的,直接用会有问题,Spring环境中使用了SqlSessionTemplate类代替 为什么SqlSessionTemplate是线程安全的:SqlSessionT 阅读全文
posted @ 2020-07-09 21:26 挣扎一下 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 哪些对象允许被代理(插件) Executor、ParameterHandler、StatementHandler、ResultSetHandler 什么时候创建代理对象 Executor sqlSession.openSession的时候被代理 其他3个创建的时候被代理 多个插件的时候,代理执行顺序 阅读全文
posted @ 2020-07-09 20:29 挣扎一下 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 主要流程 解析配置文件 创建工厂类 创建会话 会话操作数据库 架构分层 SqlSession 如果代码在事务里,一次请求的SqlSession一样,否则每次都会创建一个SqlSession。 缓存 一级缓存(默认开启):作用域:SqlSession级别。存放在SqlSession中的Excutor里 阅读全文
posted @ 2020-07-08 22:48 挣扎一下 阅读(243) 评论(0) 推荐(0) 编辑