摘要:
目录 一.写时复制介绍 二.CopyOnWriteArrayList介绍 三.CopyOnWriteArrayList源码解析 3.1 重要属性 3.2 getArray和setArray 3.3 构造方法 3.4 获取元素 3.5 添加元素 3.5.1 追加元素 3.5.2 指定位置插入元素 3. 阅读全文
摘要:
原理:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。 图解: 桶排序: 计数排序: 基数排序: 代码示例: import java.util.ArrayList; import java.util.Arrays; import ja 阅读全文
摘要:
题目: 思路: 首先明确了这个可以在一次循环中解决即时间复杂度为O(n) 其次,在循环中,我们应能知道起始的位置,然后终止于哪个位置,当碰到终止的时候必然是元素为已经纳入我们统计中的元素。然后我们要如何确认这个元素在哪个位置,并且把一些废弃的元素丢弃掉,重新到下一次统计,直至目标数组遍历完全。 所以 阅读全文
摘要:
题目: 思路: 由于这是一个链表,所以我们一般只能获取到一个头结点,然而其他信息我们不确定。所以可以采用双指针的方法。 思路一,利用一个指针获取整个链表元素的总数,利用总数减去目标数,所以我们可以确定要删除的位置。 思路二,利用一个指针先走出目标数目,然后两个指针一起走,那么先走的指针走完时,第二个 阅读全文
摘要:
题目: 思路: 如图: 思路一,利用动态规划的方法,列出全部结果来寻找规律,我们发现45度下滑,如果连续相等的话我们可以做递加,不但可以得出最长的字符串数量还可以知道字符的位置。 思路二,这是我看别人提供的一种思路,通过将一个字符串截取部分,然后判断是否在另一个字符串中,然后不断偏移直至全部比对完, 阅读全文
摘要:
前置知识(CAS部分) (1)什么是 CAS 1.CAS(Compare And Swap,比较并交换),通常指的是这样一种原子操作: 针对一个变量,首先比较它的内存值与某个期望值是否相同,如果相同,就给它赋一个新值。 2.CAS 的逻辑用伪代码描述 : if (value == expectedV 阅读全文
摘要:
ArrayBlockingQueue :基于数组结构实现的一个有界阻塞队列 LinkedBlockingQueue : 基于链表结构实现的一个无界阻塞队列,指定容量为有界阻塞队列 SynchronousQueue :不存储元素的阻塞队列 LinkedTransferQueue : 基于链表结构实现的 阅读全文
摘要:
【1】为什么要使用线程池? 示例演示: //设置业务模拟 class MyRunnable implements Runnable { private int count; public MyRunnable(int count) { this.count = count; } public int 阅读全文
摘要:
【1】前言 本篇幅是对 线程池底层原理详解与源码分析 的补充,默认你已经看完了上一篇对ThreadPoolExecutor类有了足够的了解。 【2】ScheduledThreadPoolExecutor的介绍 1.ScheduledThreadPoolExecutor继承自ThreadPoolExe 阅读全文
摘要:
Future模式 【1】Future模式是多线程开发中常见的设计模式,它的核心思想是异步调用。对于Future模式来说,它无法立即返回你需要的数据,但是它会返回一个契约,将来你可以凭借这个契约去获取你需要的信息。 【2】通俗一点就是生产者-消费者模型的扩展。经典“生产者-消费者”模型中消息的生产者不 阅读全文
摘要:
什么是CopyOnWrite容器 【1】CopyOnWrite容器是基于并发模式Copy-on-Write模式(最简单的并发解决方案)实现的用于避免共享的数据集合。 【2】CopyOnWrite容器又被成为写时复制的容器,即当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行C 阅读全文
摘要:
SynchronousQueue介绍 【1】SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take。 【2】如图所示,SynchronousQueue 最大的不同之处在于,它的容量为 0,所以没有一个地方来暂存元 阅读全文
摘要:
【1】DelayQueue 是一个支持延时获取元素的阻塞队列, 内部采用优先队列 PriorityQueue 存储元素,同时元素必须实现 Delayed 接口;在创建元素时可以指定多久才可以从队列中获取当前元素,只有在延迟期满时才能从队列中提取元素。延迟队列的特点是:不是先进先出,而是会按照延迟时间 阅读全文
摘要:
PriorityBlockingQueue介绍 【1】PriorityBlockingQueue是一个无界的基于数组的优先级阻塞队列,数组的默认长度是11,也可以指定数组的长度,且可以无限的扩充,直到资源消耗尽为止,每次出队都返回优先级别最高的或者最低的元素。默认情况下元素采用自然顺序升序排序,当然 阅读全文
摘要:
ArrayBlockingQueue介绍 ArrayBlockingQueue是最典型的有界阻塞队列,其内部是用数组存储元素的,初始化时需要指定容量大小,利用 ReentrantLock 实现线程安全。 在生产者-消费者模型中使用时,如果生产速度和消费速度基本匹配的情况下,使用ArrayBlocki 阅读全文
摘要:
什么是阻塞队列 【1】阻塞队列:从定义上来说是队列的一种,那么肯定是一个先进先出(FIFO)的数据结构。与普通队列不同的是,它支持两个附加操作,即阻塞添加和阻塞删除方法。 【2】阻塞添加:当阻塞队列是满时,往队列里添加元素的操作将被阻塞。 【3】阻塞移除:当阻塞队列是空时,从队列中获取元素/删除元素 阅读全文
摘要:
LinkedBlockingDeque介绍 【1】LinkedBlockingDeque是一个基于链表实现的双向阻塞队列,默认情况下,该阻塞队列的大小为Integer.MAX_VALUE,可以看做无界队列,但也可以设置容量限制,作为有界队列。 【2】相比于其他阻塞队列,LinkedBlockingD 阅读全文
摘要:
LinkedBlockingQueue介绍 【1】LinkedBlockingQueue是一个基于链表实现的阻塞队列,默认情况下,该阻塞队列的大小为Integer.MAX_VALUE,由于这个数值特别大,所以 LinkedBlockingQueue 也被称作无界队列,代表它几乎没有界限,队列可以随着 阅读全文
摘要:
文章目录 为什么要了解扩容机制 ArrayList LinkedList Vector Stack java.util.concurrent.CopyOnWriteArrayList Queue相关的默认容量以及扩容机制 java.util.concurrent.ArrayBlockingQueue 阅读全文