摘要: 一、Redis的历史 Redis的版本很多3.x、4.x、6.x,版本不同架构也是不同的: (1)版本3.x ,redis是单线程。 (2)版本4.x,严格意义来说也不是单线程,而是负责处理客户端请求的线程是单线程,但是开始加了点多线程的东西(异步删除)。——貌似 (3)最新版本的6.0.x后,告别 阅读全文
posted @ 2022-01-14 14:52 幻月hah 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 一、读写锁ReentrantReadWriteLock 1、基本概念 读写锁ReentrantReadWriteLock,一个资源能够被多个读线程访问,或者被一个写线程访问,但是不能同时存在读写线程。它并不是真正意义上的读写分离,它只允许读读共存,而读写和写写依然是互斥的。 一个ReentrantR 阅读全文
posted @ 2022-01-12 17:23 幻月hah 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 一、公平、非公平锁的区别 通过ReentrantLock的源码来讲解公平锁和非公平锁。 公平锁与非公平锁的lock()方法唯一的区别就在于公平锁在获取同步状态时多了一个限制条件:hasQueuedPredecessors(),它是公平锁加锁时判断等待队列中是否存在有效节点的方法。 公平锁:公平锁讲究 阅读全文
posted @ 2022-01-11 16:00 幻月hah 阅读(69) 评论(0) 推荐(0) 编辑
摘要: 一、什么是AQS 1.1 概念 AbstractQueuedSynchronizer抽象同步队列,其定义了一套多线程访问共享资源的同步器框架,通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类变量表示持有锁的状态。 1.2 基石 很多同步类实现都依赖于AQS,如常用的Reentr 阅读全文
posted @ 2022-01-11 15:16 幻月hah 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 锁升级的流程:无锁 -> 偏向锁 -> 轻量锁(CAS)-> 重量级锁 一、偏向锁 1.1撤销和升级 1、偏向锁只有遇到其他线程尝试竞争偏向锁时,持有偏向锁的线程才会释放锁,线程是不会主动释放偏向锁的。 2、撤销需要等待全局安全点(该时间点上没有字节码正在执行),同时检查持有偏向锁的线程是否还在执行 阅读全文
posted @ 2022-01-08 16:24 幻月hah 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 一、对象的构成 二、对象头 对象头的大小,在64位系统中,Mark Word占了8个字节,类元信息占了8个字节,一共是16个字节。 2.1、对象标记Mark Word 2.2、类元信息Class Pointer 对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。 三、实例数 阅读全文
posted @ 2022-01-07 16:47 幻月hah 阅读(54) 评论(0) 推荐(0) 编辑
摘要: 一、什么是内存泄露 不再会被使用的对象或者变量占用的内存不能被回收,就是内存泄露。 二、强引用 概念: 当内存不足,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收,死都不收。 强引用是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收 阅读全文
posted @ 2022-01-02 01:23 幻月hah 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 一、什么是ThreadLocal ThreadLocal,提供线程局部变量。这些变量与正常的变量不同,因为每个线程在访问ThreadLocal实例的时候(通过其get或set方法)都有自己的、独立初始化的变量副本。ThreadLocal实例通常是类中的私有静态字段,使用它的目的是希望将状态(例如,用 阅读全文
posted @ 2021-12-31 16:29 幻月hah 阅读(52) 评论(0) 推荐(0) 编辑
摘要: LongAdder,在无竞争的情况下跟AtomicLong一样,对同一个base进行操作。当出现竞争关系时则是采用化整为零的做法,用空间换时间,用一个数组cells,将一个value拆分进这个数组cells。多个线程需要同时对value进行操作时候,可以对线程id进行hash得到hash值,再根据h 阅读全文
posted @ 2021-12-30 17:24 幻月hah 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 使用目的: 以一种线程安全的方式操作非线程安全对象内的某些字段。 优点: 不用对对象加锁,只针对对象的某个属性进行原子类操作,提高并发性。 使用方式: 1、更新的对象属性必须使用public volatile修饰符。 2、因为对象的属性修改类型原子类都是抽象类,所以每次使用都必须使用静态方法newU 阅读全文
posted @ 2021-12-30 15:54 幻月hah 阅读(74) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示