- 博客(18)
- 资源 (1)
- 收藏
- 关注
原创 模板方法模式-缓存淘汰策略有哪些?
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
2020-12-29 21:32:35 455
原创 设计模式六大原则
文章目录单一职责里氏替换原则依赖倒置原则接口隔离原则迪米特法则开闭原则单一职责应该有且仅有一个原因引起类的变更。例如,设计一个视频播放系统,要求:如果是VIP用户就播放完整影片,否则只允许试看5分钟。class VideoService { public void play(Long videoId, Long userId) { if (haveAuth(userId)) { System.out.println("播放完整影片..."); }else { System.o
2020-12-23 22:45:20 801
原创 JDK中那些不得不读的源码
ArrayList源码导读。LinkedList源码导读。JDK7-HashMap源码解析。ThreadLocal源码解析。AQS源码导读。
2020-12-08 23:23:06 1491
原创 FutureTask源码导读
FutureTask是在JDK1.5被引入的,又是并发大神`Doug Lea`的杰作。它代表的是一个异步计算任务,它将在未来的某个时刻完成计算并获得一个计算结果。当线程调用`get()`去获取结果时,如果计算完毕,则立马返回,否则线程会被阻塞,直到计算完成。
2020-12-08 23:22:06 264
原创 CountDownLatch源码导读
CountDownLatch是在JDK1.5被引入的,又是并发大神`Doug Lea`的杰作。它的作用是让一组线程在等待其他N个线程到达一个统一的状态时再继续执行。
2020-12-08 22:15:57 301
原创 CyclicBarrier源码导读
CyclicBarrier也被称为“栅栏”、“屏障”,从名字就看的出来,它是可以被循环使用的。CyclicBarrier的作用是当一组线程全部都到达一个状态时,再全部同时执行。
2020-12-08 19:43:33 233
原创 LongAdder源码导读
前言JDK8提供了一个性能更好的长整型原子类:java.util.concurrent.atomic.LongAdder。在高并发下,它有着比AtomicLong更好的性能,代价是会消耗更多的内存空间。有了AtomicLong,为啥还要引入LongAdder?AtomicLong是通过volatile+CAS的方式来保证并发安全的,它只有一个value值,所有的线程都对这一个value值操作,也就意味着这个value是热点数据。随着并发量越来越高,CAS操作失败的概率也会越来越大,会有越来越多的线程
2020-12-06 15:05:02 244
原创 AtomicLong源码导读
AtomicLong是JDK5开始提供的,它的作用是:对长整型进行原子操作。类似的原子类还有:AtomicBoolean、AtomicInteger等,它们的实现原理都是一样的。在原子类出现之前,要想让一个long类型的数值完成自增操作保持原子性,那么只能通过加synchronized或者显式锁,这种解决方式不仅会让代码编写更加复杂,而且效率也不高。原子类的出现,提供了另一种解决思路来保证操作的原子性,那就是:CAS,关于CAS的详细说明可以看笔者的另一篇文章:《关于CAS的一点理解和思考》。对变量加
2020-12-06 12:51:02 593 1
原创 ReentrantLock源码导读
ReentrantLock是JDK5开始提供的Java实现的显式锁,它是一个可重入锁,依赖于AQS实现。它使用AQS的state变量作为锁的重入次数,每lock()一次state就自增1,每unlock()一次state就自减1,当state减至0时,就代表锁释放了。当锁释放后,AQS会调用unparkSuccessor()去唤醒队列中的后继节点去竞争锁,锁竞争失败的线程AQS会创建一个和线程绑定的Node节点,入队并Park挂起线程。线程同步的细节在AQS类中就已经实现,ReentrantLock只需
2020-12-04 23:10:27 310
原创 LinkedList源码导读
LinkedList底层是一个双向链表的数据结构,它的插入和删除非常的快速,只需要修改对应节点的`next`和`prev`的指向即可,不像ArrayList需要大量的移动元素的位置。
2020-12-04 21:53:12 340
原创 ArrayList源码导读
ArrayList底层是基于数组来实现的,相较于数组,它支持动态的扩容,元素的插入和删除变得很方便。相较于LinkedList,它支持快速随机访问,通过下标可以快速定位到元素,访问速度非常快。
2020-12-04 21:05:58 635
原创 RandomAccess接口有什么用?
最近在看ArrayList源码,发现ArrayList实现了一个很特别的接口:java.util.RandomAccess。这个接口没有任何东西,和java.lang.Cloneable、java.io.Serializable一样,只是一个标记接口,它的作用是什么呢?注释里写的是,这是一个标记接口,表明实现了这个接口的类是支持快速随机访问的。什么意思呢?就是说实现了这个接口的集合,代表它支持通过下标来快速访问元素,例如ArrayList。像LinkedList就没有实现这个接口,因为Linked
2020-12-03 20:58:03 289
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人