- 博客(17)
- 资源 (13)
- 收藏
- 关注
原创 Netty 源码解析 : EventLoop 之 Reactor 模型
Reactor 模型的核心思想:将关注的 I/O 事件注册到多路复用器上,一旦有 I/O 事件触发,将事件分发到事件处理器中,执行就绪 I/O 事件对应的处理函数中。模型中有三个重要的组件:多路复用器:由操作系统提供接口,Linux 提供的 I/O 复用接口有select、poll、epoll 。 事件分离器:将多路复用器返回的就绪事件分发到事件处理器中。 事件处理器:处理就绪事件处...
2019-07-25 13:52:35 645
原创 JAVA NIO 源码 : Buffer
Buffer.java类是抽象类, 并不能直接实例. 是一个用于特定基本数据类型的容器。这里的特定基本数据类型指的是:除boolean类型的其他基本上数据类型。缓冲区是特定基本数据类型元素的线性有限序列在Buffer中有两种模式,一种是写模式,一种是读模式。类图:常量 //TODO (标记) 临时备忘位置变量 , 调用 reset 方法的时候用到....
2019-07-19 11:39:27 325
原创 JDK12 jdk.internal 包 不可见
IDEA在Message中抛出如下问题:java: 程序包 jdk.internal.misc.Unsafe 不可见(程序包 jdk.internal.misc.Unsafe已在模块 java.base 中声明,但该模块未将它导出到未命名模块)可能出现以上问题的程序包:sun.net、sun.net.util、sun.net.www、jdk.internal.misc、jdk....
2019-07-19 09:48:42 16998 3
原创 ScheduledThreadPoolExecutor
ScheduledThreadPoolExecutor 是一个 可以 在指定一定延迟时间 后或者定时进行 任务调度执行的线程池。...
2019-07-14 22:14:56 828
原创 FutureTask 概览
概念FutureTask一个可取消的异步计算,FutureTask 实现了Future的基本方法,提空 start cancel 操作,可以查询计算是否已经完成,并且可以获取计算的结果。结果只可以在计算完成之后获取,get方法会阻塞当计算没有完成的时候,一旦计算已经完成,那么计算就不能再次启动或是取消。一个FutureTask 可以用来包装一个 Callable 或是一个runnable对...
2019-07-14 10:08:33 441
原创 ThreadPoolExecutor 概述 [ 二 ]
ThreadPoolExecutor 的实现 实际是一个生产 消费模型, 当用户添加任务到线程池时相当于生产 者生产元素, workers 线程工作集中的线程直接执行任务或者 从任务队列里面获取任务时则相当于消费者消费元素。程池巧妙地使用 一个 Integer类型的原子变量来记录线程池状态和线程池中 的钱程 个数。通过线程池状态来控制任务的执行,每个 Worker线程可以处理多个任务。线程池 ...
2019-07-13 17:57:18 922
原创 ThreadPoolExecutor 概述 [ 一 ]
概述线程池主要解决两个问题 :一是当执行大量异步任务时线程池能够提供较好的性能 。 在不使用线程池时,每当需要执行异步任务时直接 new 一个线程来运行,而线程的创建和 销毁是需要开销的。 线程池里面的线程是可复用的,不需要每次执行异步任务时都重新创 建和销毁线程 。二是线程池也提供了 一种资源限制和管理的手段,比如可以限制线程的个数, 动态新增线程等 。 每个 ThreadPoo!E...
2019-07-13 17:23:10 1019
原创 JAVA 线程池ThreadPoolExecutor的五种状态
在 线程池成员变量 ctl 是一个 Integer的原子变量,用来记录线程池状态和 线程池中线程个数,类似于 ReentrantReadWriteLock 使用 一个变量来保存两种信息。Integer 类型是 32 位二进制表示,则其中高 3 位用来表示线程池状态,后面 29 位用来记 录线程池线程 个数 。private final AtomicInteger ctl = new At...
2019-07-13 16:03:06 1839
原创 DelayQueue 概览
DelayQueue 内部使用 PriorityQueue 存放数据,使用 ReentrantLock 实现 线程同步 。另 外,队列里面的元素要实现 Delayed 接口,由于每个元素都有一个过期时间 , 所以要实现获知当前元素还剩下多少时 间就过期了的接口,由于内部使用优先级队列来实 现,所以要实现元素之间相互比较的接口。类图其中 leader变量的使用基于 Leade...
2019-07-13 11:23:15 968
原创 PriorityBlockingQueue 概览
PriorityBlockingQueue 是带 优 先级的无界 阻塞队列,每次出队都返回优先级最高或者 最低的元素。其内部是使用平衡二叉树堆实现的,所以直接遍历队列元素不保证有序。默 认使用对象的 compareTo 方法提供比较规则,如果你需要自定义比较规则则可以自定义 comparators 。PriorityBlockingQueue 内 部有一个数组 queue,用来存放队列元素, ...
2019-07-13 11:06:47 1126
原创 ArrayBlockingQueue 概览
底层使用数组实现.常量代码: /** The queued items */ final Object[] items; /** items index for next take, poll, peek or remove */ int takeIndex; /** items index for next put, offer, or add */...
2019-07-12 21:09:28 924
原创 LinkedBlockingQueue 和 LinkedBlockingDeque 概览
LinkedBlockingQueue和LinkedBlockingDeque,两个都是队列,只不过前者只能一端出一端入,后者则可以两端同时出入,并且都是结构改变线程安全的队列。其实两个队列从实现思想上比较容易理解,有以下特点:链表结构(动态数组)通过ReentrantLock实现锁利用Condition实现队列的阻塞等待,唤醒LinkedBlockingQueueLin...
2019-07-12 20:52:20 8630 4
原创 ConcurrentLinkedQueue 概览
ConcurrentLinkedQueue 是线程安全的无界非 阻塞队列,其底层数据结 构使用单向链表实现,对于入队和出队操作使用 CAS 来实现线程安全 。ConcurrentLinkedQueue 内部的队列 使用单 向链表方式实现,其中有两个 volatile 类型 的 Node 节点分别用来存放队列的首、尾节点 。从下面的无参构造函数可知,默认头、尾 节点都是指向 ite...
2019-07-12 20:34:36 924
原创 抽象同步队列 AQS 三部曲 [ 三 ]
概述AQS 有个内 部类 ConditionObject, 用来结合锁实现线程同步 。 ConditionObject 可以 直接访问 AQS对象内部的变量,比如 state状态值和 AQS 队列。 ConditionObject是条件 变量 , 每 个条件 变量对应 一 个 条 件队列 (单向链表队列),其用来存放调用条件变 量 的 await 方法后被阻塞的线程,如类图所示 , 这个...
2019-07-12 16:35:21 1051
原创 抽象同步队列 AQS三部曲 [ 二 ]
图解加锁/解锁 流程图(点击, 放大看)流程概述-------------------------------获取资源-------------------------------当一个线程调用 acquire(int arg)方法获取独占资源时,会首先使用 tryAcquire方 法尝试获取资源, 具体是设置状态变量 state 的值,成功则直接返...
2019-07-12 10:41:02 1042
原创 抽象同步队列 AQS三部曲 [ 一 ]
AbstractQueuedSynchronizer 抽象同步队列简称 AQS,它是实现同步器的 基 础组件, 并发包中锁的底层就是使用 AQS 实现的 。AQS是一个FIFO的双向队列,其内部通过节点head和tail记录队 首和队尾元素,队列元素的类型为 Node。其中 Node 中的 thread变量用来存放进入 AQS 队列里面的线程: Node 节点内部的 SHAR...
2019-07-12 10:27:52 1144
原创 如何设计实现一个LRU Cache?
1. 什么是LRU Cache?LeetCode上看到一个LRU Cache实现的题目,题目描述是这样的esign and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations:getandset.get(key)-...
2019-07-11 11:02:41 1130 4
jdk-8u251-macosx/linux/windows 多版本下载
2020-06-28
Flink基础教程.pdf
2019-05-28
深入理解计算机系统(原书第3版)PDF 计算机科学丛书 [美] 兰德尔 E.布莱恩特
2019-03-08
Java虚拟机规范(Java SE 8版) 带书签
2018-10-26
Thinking in UML(2 edition)
2014-06-24
JavaScript语言精粹
2014-06-24
《谁说菜鸟不会数据分析》入门篇-简版电子书
2014-06-24
[逻辑思维训练500题II].于雷.扫描版
2014-06-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人