- 博客(20)
- 收藏
- 关注
原创 23种设计模式之状态模式和策略模式的区别
在行为类设计模式中,状态模式和策略模式是亲兄弟,两者非常相似,我们先看看两者的通用类图,把两者放在一起比较一下状态模式与策略模式很相似,确切的说状态模式包含策略模式。策略模式封装的是行为,而状态模式封装的是变化。尽管这么说,但事实上策略模式与状态模式在很多情况下都是可以互相转化的,具体应该使用何种模式,就要从上面的两个方面尽心分析,能够看得出明显状态变化的,当热要用状态模式;
2023-06-15 07:58:41
323
原创 JDK动态代理和CGLIB动态代理
如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP。如果目标对象实现了接口,可以强制使用CGLIB实现AOP。如果目标对象没有实现了接口,必须采用CGLIB库,Spring会自动在JDK动态代理和CGLIB之间转换实现InvocationHandler使用Proxy.newProxyInstance产生代理对象被代理的对象必须要实现接口CGLib必须依赖于CGLib的类库,但是它需要类来实现任何接口代理的是指定的类生成一个子类。
2023-05-16 09:31:11
192
原创 ThreadLocal 详解
ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。因为每个 Thread 内有自己的实例副本,且该副本只能由当前 Thread 使用。
2023-05-11 08:02:54
203
原创 Volatile关键字的作用
Volatile关键字的作用主要有如下两个:1.线程的可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。2. 顺序一致性:禁止指令重排序。
2023-04-14 08:40:53
90
原创 HASHMAP死锁分析
此时对于线程 B 来说,当前结点e指向 a 结点,下一个结点e.next仍然指向 b 结点(此时在线程 A 的链表中,已经是c->b->a的顺序)。经历过大厂面试或者有所了解的同学都应该知道,HashMap是面试时面试官特别喜欢的问题,除了HashMap的扩容方式,为什么扩容的2的次幂等以外,还经常会问到HashMap死锁的相关问题。既然下一个结点e.next不为 null,那么当前结点e就变成了 b 结点,下一个结点e.next变为 a 结点。同时下一个结点e.next为 null,流程结束。
2023-04-12 19:26:57
836
原创 为什么HashMap的加载因子是0.75
HashMap的初始容量大小默认是16,为了减少冲突发生的概率,当HashMap的数组长度到达一个临界值的时候,就会触发扩容,把所有元素rehash之后再放在扩容后的容器中,这是一个相当耗时的操作。简单地说,就是以当前冲突位置为起点,步长为1循环查找,直到找到一个空的位置,如果循环完了都占不到位置,就说明容器已经满了。有很多东西之前在学的时候没怎么注意,笔者也是在重温HashMap的时候发现有很多可以去细究的问题,最终是会回归于数学的,如HashMap的加载因子为什么是0.75?
2023-04-10 16:50:49
214
原创 ReentrantLock详解
https://baijiahao.baidu.com/s?id=1710170618433975583&wfr=spider&for=pc
2023-03-30 16:00:43
68
原创 AQS详解
谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...。概述框架源码详解简单应用若有不正之处,请谅解和批评指正,不胜感激。
2023-03-27 17:33:37
155
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人