JDK&JUC&设计模式
文章平均质量分 90
看JDK&JUC&设计模式总结
ΘLLΘ
ΘLLΘ的博客!
展开
-
【设计模式】创建者模式(单例&工厂&原型&建造者)
文章目录1.单例设计模式1.1 单例模式概述1.2 单例模式的实现1.2.1 饿汉式(静态变量方式)1.2.2 饿汉式(静态代码块方式)1.2.3 懒汉式(线程不安全)1.2.4 懒汉式(双重检查锁)1.2.5 懒汉式(静态内部类)1.2.6 枚举方式1.3 存在的问题1.4 JDK单例模式的体现2.工厂模式2.1 工厂模式概述2.2 简单工厂模式2.2.1 结构2.2.2 实现2.2.4 优缺点2.2.5 静态工厂2.3 工厂方法模式2.3.1 概念2.3.2 结构2.3.3 实现2.3.4 优缺点2.原创 2022-04-06 10:16:27 · 746 阅读 · 11 评论 -
【JUC】AQS源码分析
文章目录AQS1.概述2.实现不可重入锁2.1 自定义同步器类+自定义不可重入锁2.2 测试类3.AQS总结4.Node内部类5.主要属性6.子类需要实现的主要方法7.总结 AQS 1.概述 AQS全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架 特点: 用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁 getState - 获取 state 状态 setState - 设置 state 状原创 2022-01-14 15:42:43 · 359 阅读 · 1 评论 -
【JUC】ReentrantLock源码分析
文章目录ReentrantLock源码1.简介2.主要内部类3.主要属性4.主要构造方法5.lock()方法5.1 公平锁实现5.2 非公平锁实现6.lockInterruptibly()方法7.tryLock()方法8.tryLock(long time, TimeUnit unit)方法9.unlock()方法10.ConditionObject的主要属性11.lock.newCondition()方法12.condition.await()方法13.condition.signal()方法 Reent原创 2022-01-14 14:50:58 · 328 阅读 · 2 评论 -
【JUC】Semaphore源码分析
文章目录Semaphore1.Semaphore概述2.Semaphore应用3.Semaphore原理4.内部类Sync5.内部类NonfairSync6.内部类FairSync7.构造方法8.其他方法8.1 acquire()方法8.2 acquireUninterruptibly()方法8.3 tryAcquire()方法8.4 tryAcquire(long timeout, TimeUnit unit)方法8.5 release()方法8.6 acquire(int permits)方法8.7 a原创 2022-01-14 13:33:00 · 264 阅读 · 0 评论 -
【JUC】CountdownLatch源码分析
文章目录CountdownLatch1.简介2.应用—同步等待多线程准备完毕3.应用—同步等待多个远程调用结束4.内部类Sync5.构造方法6.await()方法7.countDown()方法8.总结 CountdownLatch 1.简介 CountDownLatch,可以翻译为倒计时器,但是似乎不太准确,它的含义是允许一个或多个线程等待其它线程的操作执行完毕后再执行后续的操作。 CountDownLatch的通常用法和Thread.join()有点类似,等待其它线程都完成后再执行主任务。 其中构造参数用原创 2022-01-14 13:16:21 · 316 阅读 · 1 评论 -
【JUC】CyclicBarrier源码分析
文章目录CyclicBarrier1.简介2.内部类3.主要属性4.构造方法5.await()方法6.总结 CyclicBarrier 1.简介 循环栅栏,用来进行线程协作,等待线程满足某个计数。构造时设置『计数个数』,每个线程执行到某个需要“同步”的时刻调用 await() 方法进行等待,当等待的线程数满足『计数个数』时,继续执行。 @Slf4j public class TestCyclicBarrier { public static void main(String[] args) {原创 2022-01-14 12:58:40 · 226 阅读 · 1 评论 -
ThreadLocal详解(附面试题)
文章目录ThreadLocal详解(附面试题)1.ThreadLocal介绍2.基本使用2.1 常用方法2.2 栗子2.3 ThreadLocal类与synchronized关键字3.ThreadLocal 的内部结构3.1 JDK8之前的设计3.2 JDK8的优化4.ThreadLocal 的核心方法源码4.1 set方法4.2 get方法4.3 remove方法4.4 initialValue方法5.ThreadLocalMap 源码分析5.1 基本结构5.2 弱引用和内存泄漏5.3 hash冲突的解决原创 2022-01-05 19:23:31 · 2880 阅读 · 35 评论 -
【JDK源码】HashMap源码分析(附常见面试题)
HashMap源码分析(附面试题) 1.什么是哈希? 在分析HashMap之前,我们先来了解什么是哈希? 概念:Hash也称散列、哈希,对应的英文都是Hash。基本原理就是把任意长度的输入,通过Hash算法变成固定长度的输出这个映射的规则就是对应的Hash算法,而原始数据映射后的二进制串就是哈希值。 Hash的特点: 从hash值不可以反向推导出原始的数据 输入数据的微小变化会得到完全不同的hash值,相同的数据会得到相同的 哈希算法的执行效率要高效,长的文本也能快速地计算出哈希值 hash算法的冲.原创 2022-01-02 10:36:24 · 1907 阅读 · 31 评论 -
【JDK源码】PriorityQueue源码分析
文章目录PriorityQueue源码分析1.简介2.主要属性3.入队4.扩容5.出队6.取队首元素7.总结 PriorityQueue源码分析 1.简介 优先级队列,是0个或多个元素的集合,集合中的每个元素都有一个权重值,每次出队都弹出优先级最大或最小的元素。 一般来说,优先级队列使用堆来实现。 2.主要属性 // 默认容量 private static final int DEFAULT_INITIAL_CAPACITY = 11; // 存储元素的数组 transient Object[] que原创 2022-01-02 09:01:41 · 415 阅读 · 1 评论 -
【JDK源码】HashSet&LinkedHashSet源码分析
文章目录HashSet源码分析1.简介2.属性3.构造方法4.常用方法4.1 添加元素4.2 删除元素4.3 查询元素4.4 遍历元素4.5 序列化方法5.总结LinkedHashSet源码分析1.简介2.源码分析3.总结 HashSet源码分析 1.简介 HashSet是Set的一种实现方式,底层主要使用HashMap来确保元素不重复。 HashSet的特点: 无序性(存储元素无序) 唯一性(允许使用null) 本质上,HashSet底层是通过HashMap来保证唯一性 HashSet没有提供get(原创 2022-01-02 08:49:42 · 263 阅读 · 0 评论 -
【JDK源码】ArrayDeque源码分析
文章目录ArrayDeque源码分析1.简介2.主要属性3.主要构造方法4.入队5.扩容6.出队7.作为栈8.总结 ArrayDeque源码分析 1.简介 双端队列是一种特殊的队列,它的两端都可以进出元素,故而得名双端队列。 ArrayDeque是一种以数组方式实现的双端队列,它是非线程安全的。 通过继承体系可以看,ArrayDeque实现了Deque接口,Deque接口继承自Queue接口,它是对Queue的一种增强。 从继承体系可以看出,ArrayDeque实现了Cloneable和Serializ原创 2022-01-02 08:40:56 · 551 阅读 · 0 评论 -
【JDK源码】LinkedList源码分析
文章目录LinkedList源码分析1.简介2.主要属性3.主要内部类4.主要构造方法5.添加元素6.删除元素7.清除方法8.作为栈9.总结 LinkedList源码分析 1.简介 通过继承体系,我们可以看到LinkedList不仅实现了List接口,还实现了Queue和Deque接口,所以它既能作为List使用,也能作为双端队列使用,当然也可以作为栈使用。 从继承体系可以看出,LinkedList实现了Cloneable和Serializable接口,说明其可以被克隆,也可以被序列化!同样的,Link原创 2022-01-01 21:29:36 · 873 阅读 · 4 评论 -
【JDK源码】ArrayList 源码分析
文章目录ArrayList 源码分析1.简介2.属性3.构造方法ArrayList(int initialCapacity)ArrayList()ArrayList(Collection c)4.相关操作方法add(E e)add(int index, E element)addAll(Collection c)get(int index)remove(int index)remove(Object o)retainAll(Collection c)removeAll(Collection c)5.总结 A原创 2022-01-01 21:05:47 · 731 阅读 · 1 评论 -
【设计模式】单例模式
文章目录单例模式详解0.概述1.饿汉式1.1 饿汉式单例实现1.2 破坏单例的几种情况1.3 预防单例的破坏2.枚举饿汉式2.1 枚举单例实现2.2 破坏单例3.懒汉式4.双检锁懒汉式5.内部类懒汉式6.JDK中单例的体现 单例模式详解 0.概述 为什么要使用单例模式? 在我们的系统中,有一些对象其实我们只需要一个,比如说:线程池、缓存、对话框、注册表、日志对象、充当打印机、显卡等设备驱动程序的对象。事实上,这一类对象只能有一个实例,如果制造出多个实例就可能会导致一些问题的产生,比如:程序的行为异常、.原创 2021-12-25 20:46:21 · 2502 阅读 · 57 评论