自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张伯毅的专栏

人生就是一道证明题,证明我们的存在不是偶然....

原创 Netty 源码解析 : EventLoop 之 Reactor 模型

Reactor 模型的核心思想: 将关注的 I/O 事件注册到多路复用器上,一旦有 I/O 事件触发,将事件分发到事件处理器中,执行就绪 I/O 事件对应的处理函数中。模型中有三个重要的组件: 多路复用器:由操作系统提供接口,Linux 提供的 I/O 复用接口有select、poll、epo...

2019-07-25 13:52:35

阅读数 95

评论数 0

原创 JAVA NIO 源码 : Buffer

Buffer.java类是抽象类, 并不能直接实例. 是一个用于特定基本数据类型的容器。 这里的特定基本数据类型指的是:除boolean类型的其他基本上数据类型。 缓冲区是特定基本数据类型元素的线性有限序列 在Buffer中有两种模式,一种是写模式,一种是读模式。 类图: 常...

2019-07-19 11:39:27

阅读数 82

评论数 0

原创 JDK12 jdk.internal 包 不可见

IDEA在Message中抛出如下问题: java: 程序包 jdk.internal.misc.Unsafe 不可见 (程序包 jdk.internal.misc.Unsafe 已在模块 java.base 中声明,但该模块未将它导出到未命名模块) 可能出现以上问题的程序包:sun.n...

2019-07-19 09:48:42

阅读数 1002

评论数 0

原创 ScheduledThreadPoolExecutor

ScheduledThreadPoolExecutor 是一个 可以 在指定一定延迟时间 后或者定时进行 任务调度执行的线程池。 ...

2019-07-14 22:14:56

阅读数 188

评论数 0

原创 FutureTask 概览

概念 FutureTask一个可取消的异步计算,FutureTask 实现了Future的基本方法,提空 start cancel 操作,可以查询计算是否已经完成,并且可以获取计算的结果。结果只可以在计算完成之后获取,get方法会阻塞当计算没有完成的时候,一旦计算已经完成,那么计算就不能再次启动...

2019-07-14 10:08:33

阅读数 64

评论数 0

原创 ThreadPoolExecutor 概述 [ 二 ]

ThreadPoolExecutor 的实现 实际是一个生产 消费模型, 当用户添加任务到线程池时相当于生产 者生产元素, workers 线程工作集中的线程直接执行任务或者 从任务队列里面获取任务时则相当于消费者消费元素。 程池巧妙地使用 一个 Integer类型的原子变量来记录线程池状态和线...

2019-07-13 17:57:18

阅读数 52

评论数 0

原创 ThreadPoolExecutor 概述 [ 一 ]

概述 线程池主要解决两个问题 : 一是当执行大量异步任务时线程池能够提供较好的性能 。 在不使用线程池时,每当需要执行异步任务时直接 new 一个线程来运行,而线程的创建和 销毁是需要开销的。 线程池里面的线程是可复用的,不需要每次执行异步任务时都重新创 建和销毁线程 。 二是线程池也提供了...

2019-07-13 17:23:10

阅读数 57

评论数 0

原创 JAVA 线程池ThreadPoolExecutor的五种状态

在 线程池成员变量 ctl 是一个 Integer的原子变量,用来记录线程池状态和 线程池中线程个数,类似于 ReentrantReadWriteLock 使用 一个变量来保存两种信息。 Integer 类型是 32 位二进制表示,则其中高 3 位用来表示线程池状态,后面 29 位用来记 录线程...

2019-07-13 16:03:06

阅读数 222

评论数 0

原创 DelayQueue 概览

DelayQueue 内部使用 PriorityQueue 存放数据,使用 ReentrantLock 实现 线程同步 。另 外,队列里面的元素要实现 Delayed 接口,由于每个元素都有一个过期时间 , 所以要实现获知当前元素还剩下多少时 间就过期了的接口,由于内部使用优先级队列来实 现,所以...

2019-07-13 11:23:15

阅读数 41

评论数 0

原创 PriorityBlockingQueue 概览

PriorityBlockingQueue 是带 优 先级的无界 阻塞队列,每次出队都返回优先级最高或者 最低的元素。其内部是使用平衡二叉树堆实现的,所以直接遍历队列元素不保证有序。默 认使用对象的 compareTo 方法提供比较规则,如果你需要自定义比较规则则可以自定义 comparators...

2019-07-13 11:06:47

阅读数 40

评论数 0

原创 ArrayBlockingQueue 概览

底层使用数组实现. 常量代码: /** The queued items */ final Object[] items; /** items index for next take, poll, peek or remove */ int takeIndex; ...

2019-07-12 21:09:28

阅读数 47

评论数 0

原创 LinkedBlockingQueue 和 LinkedBlockingDeque 概览

LinkedBlockingQueue和LinkedBlockingDeque,两个都是队列,只不过前者只能一端出一端入,后者则可以两端同时出入,并且都是结构改变线程安全的队列。其实两个队列从实现思想上比较容易理解,有以下特点: 链表结构(动态数组) 通过ReentrantLock实现锁 利用...

2019-07-12 20:52:20

阅读数 189

评论数 0

原创 ConcurrentLinkedQueue 概览

ConcurrentLinkedQueue 是线程安全的无界非 阻塞队列,其底层数据结 构使用单向链表实现, 对于入队和出队操作使用 CAS 来实现线程安全 。 ConcurrentLinkedQueue 内部的队列 使用单 向链表方式实现,其中有两个 volatile 类型 的 Node...

2019-07-12 20:34:36

阅读数 46

评论数 0

原创 抽象同步队列 AQS 三部曲 [ 三 ]

概述 AQS 有个内 部类 ConditionObject, 用来结合锁实现线程同步 。 ConditionObject 可以 直接访问 AQS对象内部的变量,比如 state状态值和 AQS 队列。 ConditionObject是条件 变量 , 每 个条件 变量对应 一 个 条 件队列 (单...

2019-07-12 16:35:21

阅读数 70

评论数 0

原创 抽象同步队列 AQS三部曲 [ 二 ]

图解 加锁/解锁 流程图(点击, 放大看) 流程概述 -------------------------------获取资源------------------------------- 当一个线程调用 acquire(int arg)方法获取独占资源时,会首先使用 tryAc...

2019-07-12 10:41:02

阅读数 61

评论数 0

原创 抽象同步队列 AQS三部曲 [ 一 ]

AbstractQueuedSynchronizer 抽象同步队列简称 AQS, 它是实现同步器的 基 础组件, 并发包中锁的底层就是使用 AQS 实现的 。 AQS是一个FIFO的双向队列,其内部通过节点head和tail记录队 首和队尾元素,队列元素的类型为 Node。 其中 Nod...

2019-07-12 10:27:52

阅读数 49

评论数 0

原创 如何设计实现一个LRU Cache?

1. 什么是LRU Cache? LeetCode上看到一个LRU Cache实现的题目,题目描述是这样的 esign and implement a data structure for Least Recently Used (LRU) cache. It should suppor...

2019-07-11 11:02:41

阅读数 56

评论数 0

提示
确定要删除当前文章?
取消 删除