摘要:
一、读写锁 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)

浙公网安备 33010602011771号