技术JAVA
35重新开始
这个作者很懒,什么都没留下…
展开
-
CountDownLatch的实现原理
使用场景:需要在主线任务中开启多个线程,并等到所有子线程完成工作之后再进行汇总的情形,这种情况下可以考虑使用CountDownLatch这个工具类实现功能。原理:CountDownLatch的工作原理:CountDownLatch使用AQS实现的,使用AQS的state变量来存放计数器的值。在调用CountDownLatch的构造函数时,会调用内部类Sync的构造函数将值赋给state变量,当多个线程调用countdown方法时实际是使用CAS递减state变量的值;当线程调用await方法后当前线程转载 2020-05-15 23:52:40 · 352 阅读 · 0 评论 -
spring AOP的代理机制
使用AOP实现日志的例子:https://www.cnblogs.com/qlqwjy/p/8747476.htmlAOP 思想: 基于代理思想,对原来目标对象,创建代理对象,在不修改原对象代码情况下,通过代理对象,调用增强功能的代码,从而对原有业务方法进行增强 !AOP应用场景场景一: 记录日志场景二: 监控方法运行时间 (监控性能)场景三: 权限控制场景四: 缓存优化 (第一次调用查询数据库,将查询结果放入内存对象, 第二次调用, 直接从内存对象返回,不需要查询数据库 )场景五: 事务管原创 2020-05-15 23:51:38 · 150 阅读 · 0 评论 -
Java CAS 和ABA问题
独占锁:是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。乐观锁:每次不加锁,假设没有冲突去完成某项操作,如果因为冲突失败就重试,直到成功为止。一、CAS 操作乐观锁用到的机制就是CAS,Compare and Swap。CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。1、非阻塞算法 (nonblocking algorithms)一个线程的失败或者挂起不原创 2020-05-15 23:50:23 · 101 阅读 · 0 评论