- 博客(17)
- 资源 (7)
- 收藏
- 关注
原创 网络基础(二) — HTTP
HTTP一、概述二、HTTP 持久连接、管线化三、HTTP请求方法四、HTTP 报文4.1 响应状态码2XX 成功3XX 重定向4XX 客户端错误5XX 服务端错误一、概述HTTP (HyperText Transfer Protocol): 超文本传输协议。HTTP 是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP 是无状态协议,即每次 HTTP 请求之间都是...
2020-03-27 00:20:16 304
原创 OkHttp(二) — Interceptor 拦截器
Interceptor 拦截器一、概述二、RetryAndFollowUpInterceptor三、BridgeInterceptor四、CacheInterceptor五、ConnectInterceptor六、CallServerInterceptor一、概述OkHttp 版本: 3.14.7在 OkHttp(一) — OkHttp 调用流程分析 中,我们介绍了一个请求的调用流程。请求...
2020-03-22 16:38:51 695
原创 并发容器(四) — DelayQueue 源码解析
DelayQueue 源码解析一、概述二、源码解析1. 入队2. 出队3. 延迟功能的实现一、概述DelayQueue 是一个无界阻塞队列,它提供了在指定时间才能获取队列元素的功能,队列头元素是最接近过期的元素 (通过最小堆实现)。DelayQueue 队列本身不具备存储能力,而是在内部通过 PriorityQueue 队列来实现存储功能和获取最近过期元素功能。PriorityQueue ...
2020-03-19 18:18:15 196
原创 并发容器(三) — PriorityBlockingQueue(优先队列)源码解析
PriorityBlockingQueue源码解析一、概述二、三、一、概述PriorityBlockingQueue 是一个支持优先级的无界阻塞队列。队列内部使用 数组 存储数据。由于数组初始化时,长度已经确定,而PriorityBlockingQueue又是一个无界队列,因此内部存在自动扩容机制 (类似ArrayList)。PriorityBlockingQueue 使用最小堆来实现...
2020-03-19 14:36:12 247
原创 数据结构 — 二叉堆
二叉堆一、概述二、堆的两种类型1. 最大堆2. 最小堆三、代码实现一、概述二叉堆本质上是一种完全二叉树,二叉堆有两种类型:最大堆最小堆完全二叉树:数据结构—完全二叉树二、堆的两种类型1. 最大堆什么是最大堆呢?最大堆任何一个父节点的值,都大于等于它左右孩子节点的值。2. 最小堆什么是最小堆呢?最小堆任何一个父节点的值,都小于等于它左右孩子节点的值。三、代码实现...
2020-03-18 23:16:32 408
原创 并发容器(二) — ArrayBlockingQueue源码解析
ArrayBlockingQueue源码解析一、概述二、源码解析1. 构造函数2. 实际入队、出队的操作3. 有阻塞功能的入队、出队操作4. 有超时且非阻塞的入队、出队操作三、小结一、概述ArrayBlockingQueue 是一个用数组实现的有界阻塞队列。ArrayBlockingQueue的数据结构:上图涉及:ReentrientLock、Condition、BlockingQueu...
2020-03-17 16:27:10 189 1
原创 并发容器(一) — 综述
综述一、概述二、三、一、概述在并发编程中,有时需要使用线程安全的队列。实现一个线程安全的队列有两种方式:第一种方式:使用阻塞算法,使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现。第二种方式:使用非阻塞算法。非阻塞的实现方式是使用循环CAS的方式来实现。JDK中提供了如下并发容器。二、三、...
2020-03-17 14:05:21 169
原创 Lock(五) — LockSupport 和 Condition接口
LockSupport 和 Condition接口一、概述二、Condition 接口与示例1. 使用示例2. Condition 接口三、Condition 实现原理1. 等待队列2. 等待3. 通知4. Condition 的应用四、LockSupport一、概述任意一个Java对象,都拥有一组监视器方法(定义在java.lang.Object上)。主要包括 wait()、wait(lo...
2020-03-15 22:15:57 300
原创 Lock(四) — 可重入锁(ReentrantLock)源码解析
ReentrantLock源码解析一、概述二、ReentrantLock 类图三、源码解析1. ReentrantLock 的使用2. ReentrantLock 锁的获取四、小结1. 如何实现公平锁?2. 如何实现非公平锁?一、概述重入锁: 当该锁被线程A持有时,线程A仍可以重新获取该锁。公平锁: 在获取锁时,如果线程A先对锁进行获取,则当锁释放后,线程A优先获得锁。非公平锁: 在获取锁...
2020-03-15 17:03:57 343
原创 Lock(三) — 自定义AQS (实践)
自定义AQS一、概述二、自定义AQS三、调试一、概述上一篇分析了 Lock(二) — 队列同步器(AQS)浅析 后,这里自己实现一个AQS。二、自定义AQS// 自定义一个独占锁(同一时刻,只有一条线程可以访问资源)public class CustomLock implements Lock { // 自定义同步器 class Sync extends AbstractQ...
2020-03-15 10:13:06 316
原创 Lock(二) — 队列同步器(AQS)浅析
队列同步器 AQS 一、概述二、同步器的方法1. 同步器可重写的方法2. 同步器中的模板方法三、独占式1. 获取同步状态( acquire(int arg) )四、共享式一、概述队列同步器 AbstractQueuedSynchronizer(简称AQS),是用来构建锁或者其他同步组件的基础框架。AQS 依托于一个 volatile 修饰的变量 state 进行状态管理,AQS 内部提供了如...
2020-03-14 22:55:38 306
原创 Executor框架(四) — ThreadPoolExecutor源码解析
ThreadPoolExecutor源码解析一、概述二、ThreadPoolExecutor 执行任务示意图三、ThreadPoolExecutor 源码分析1. 构造参数的含义2. 常量补码的相关知识runState 几种状态的说明3. 提交任务execute()submit()4. addWorker(Runnable firstTask, boolean core) 方法5. Worker ...
2020-03-08 12:34:38 320
原创 Executor框架(三) — 几种常见的线程池
几种常见的线程池一、概述二、ThreadPoolExecutor 线程池1. FixedThreadPool2. SingleThreadExecutor3. CachedThreadPool三、ScheduledThreadPoolExecutor线程池一、概述如下图所示,Executor框架中线程池的类型有如下2种:ThreadPoolExecutor、ScheduledThreadPoo...
2020-03-04 17:21:26 851
原创 Executor框架(二) — 线程池原理浅析
线程池的浅析一、概述二、线程池实现原理2.1 线程池实现原理2.2 ThreadPoolExecutor的实现方案1. ThreadPoolExecutor执行execute()方法的示意图如下:2. JDK1.8 `ThreadPoolExecutor.execute()` 代码如下:三、线程池的使用3.1 线程池的创建3.2 提交任务3.3 关闭线程池3.4 合理分配线程池3.5 线程池的监控...
2020-03-04 14:15:17 315
Two Scoops of Django 1.11- 2017(Daniel Greenfeld).pdf
2017-09-10
graphviz-2.37
2016-11-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人