摘要: 一、读写锁 ReentrantReadWriteLock 读写锁锁的一个资源能够被多个线程访问,或者被一个写线程访问,但是不能同时存在读写操作。读写操作时互斥的。 锁降级 锁降级就是将写入锁降级为读锁,是为了让当前线程感知到数据的变化,从而保证数据的可见性。 如果同一个线程持有了写锁,在没有释放写锁 阅读全文
posted @ 2023-03-19 18:09 冬日寻雾记 阅读(85) 评论(0) 推荐(0)
摘要: 我们要知道AQS是JUC的基石 我们用ReentrantLock来举例 当线程进来后,直接利用CAS尝试抢占锁,如果抢占成功,则state被改成1,且设置对象独占锁线程为当前线程 protected final boolean compareAndSetState(int expect, int u 阅读全文
posted @ 2023-03-19 17:59 冬日寻雾记 阅读(18) 评论(0) 推荐(0)
摘要: 一、三种GC算法 标记清楚(Mark-Sweep) 拷贝(Copying) 标记压缩(Mark-Compact) 二、基础GC回收 1.第一代Serial与SerialOld 单线程,会有严重的STW(stop the world) 用的是Copying Old用的是Mark-Sweep/Compa 阅读全文
posted @ 2023-03-19 17:34 冬日寻雾记 阅读(32) 评论(0) 推荐(0)
摘要: 一、逃逸分析 当一个对象在方法中被定义后,它有两种可能 被外部方法所引用:作为调用参数传递给其他方法,称为方法逃逸 被外部线程所引用:赋值给可以在其他线程中访问的实例变量,称为线程逃逸 如果能证明一个对象不会逃逸到方法或线程外,或者逃逸程度较低,则可以采取不同程度的优化 二、栈上分配 如果确定一个对 阅读全文
posted @ 2023-03-19 17:10 冬日寻雾记 阅读(119) 评论(0) 推荐(0)
摘要: 一、什么是循环依赖、一级缓存 A、B两个Service相互依赖,类似于死锁,我们来看AServiceBean的生命周期 我们要填充bService时,在单例池找不到B,就会先去创建B。但是创建B的时候,触发B的Bean的生命周期,在单例池也找不到A,产生循环依赖。 那么怎么处理呢,就需要打破依赖 s 阅读全文
posted @ 2023-03-19 16:24 冬日寻雾记 阅读(937) 评论(0) 推荐(0)