自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

anlian523的博客

今天不学习,明天变垃圾,后天垃圾分类

  • 博客(11)
  • 资源 (1)
  • 收藏
  • 关注

原创 JUC线程池 ThreadPoolExecutor源码解析 JDK8

ThreadPoolExecutor提供了管理线程的功能,它的最大好处在于能够复用线程,而不必在想要异步执行时用原始的new Thread().start()起线程。在构造ThreadPoolExecutor时通过给定不同的参数,可以得到不同效果的线程池。这样,使用者可以不用关心线程的管理,而专心于业务的编写。

2020-08-31 23:19:08 1311

原创 JUC框架 CompletableFuture源码解析 JDK8

我们知道FutureTask实现了task异步执行,但对于执行结果的获取,如果异步执行还在进行中,那么线程只能get阻塞等待,或者轮询isDone,这两种方式都和我们开始实现异步的初衷相违背。所以就诞生了这个CompletableFuture,它的最大不同之处在于,通过提供回调函数的概念,把处理执行结果的过程也放到异步线程里去做。

2020-08-24 23:41:27 2378 1

原创 JUC框架 FutureTask源码解析 JDK8

FutureTask的使用方法已经在上一篇进行了讲解,其实它和SynchronousQueue很像,执行task的线程是生产者,获取执行结果的线程是消费者,消费者阻塞的原因不是生产者还没来,是因为生产者还没有生产出来执行结果。只不过,这里只有一个生产者(FutureTask对象),却可以对应到多个消费者(对同一个FutureTask对象调用get的不同线程)。

2020-08-17 00:05:00 955

原创 JUC框架 从Runnable到Callable到FutureTask 使用浅析

本文旨在简单讲解Runnable、Callable、FutureTask这几个线程执行相关的接口和类。为后面FutureTask源码讲解作铺垫。

2020-08-15 19:49:39 642

原创 JUC集合类 SynchronousQueue源码解析 JDK8

SynchronousQueue其实就是LinkedTransferQueue的升级版,相同的是它们都作为生产者和消费者交互的通道,可以直接让生产者和消费者打交道。不同的是,SynchronousQueue做的更彻底,不去支持无关的共有操作(比如size()),只提供必要的入队出队方法。并且,SynchronousQueue提供了两种逻辑结构,栈和队列。理解LinkedTransferQueue是搞懂SynchronousQueue的前提。

2020-08-15 11:42:42 2865

原创 JUC集合类 LinkedTransferQueue源码解析 JDK8

LinkedTransferQueue是一种特殊的无界阻塞队列,它提供一种Transfer的功能,用以保证生产者把数据传输给消费者。其他的普通队列,生产者是不需要关心消费者是否存在的,但现在的LinkedTransferQueue却需要保证生产者把数据确实传输给了消费者,才算是一次成功的入队操作,否则算作入队失败。

2020-08-09 22:38:05 797

原创 JUC集合类 DelayQueue源码解析 JDK8

DelayQueue是一个无界阻塞队列,它和PriorityBlockingQueue一样是一个优先队列,但区别在于队列元素只能放置Delayed对象,而且只有元素到期后才能将其出队。内部是一个最小堆,堆顶永远是最先“到期”的那个元素。如果堆顶元素没有到期,即使线程发现队列中有元素,也不能将其出队。DelayQueue需要依赖于元素对Delayed接口正确实现,即保证到期时间短的Delayed元素.compareTo(到期时间长的Delayed元素) < 0,这样可以让到期时间短的Delayed元素

2020-08-07 22:59:40 612 1

原创 JDK8 PriorityBlockingQueue(Collection<? extends E> c)构造器 源码解析

PriorityBlockingQueue的这个(Collection<? extends E> c)重载版本构造器的源码有几个地方有点难懂,但本文讲述内容不是PriorityBlockingQueue的重点理解内容,所以本文单独讲解。

2020-08-05 22:41:53 441

原创 JUC集合类 PriorityBlockingQueue源码解析 JDK8

PriorityBlockingQueue是一个无界阻塞队列,它的出队方式不再是FIFO,而是优先级高的先出队。其内部实现是最小堆,即堆顶元素是逻辑上最小的那个元素,也是最先出队的那个元素。简单的说,如果a.compareTo(b) < 0的话,那么a将先出队。

2020-08-04 22:03:07 521

原创 从小顶堆到堆排序——超详细图解——Python3实现

在简单选择排序中,每次选择会从待排序元素中找到最小值,但每次选择都需要遍历完剩余所有元素,而且在遍历时没有记录起来有用信息,这显得很浪费。而堆排序则利用了最小堆(或最大堆)的性质,每次选择最小值都会利用堆的数据结构来保存有用信息,即总是使得整个堆是一个最小堆,以便下一次选择时直接选择索引为0的节点就可以了。注意,本文使用到一个打印完全二叉树的算法方便我们观察整个堆的样子。具体做法是,新建一个printHeap.py,把这个算法除了测试代码都放进去。(不要误会,我绝对不是因为嫌画图麻烦才来写这个算法的

2020-08-01 23:54:54 1867

原创 打印一颗基于数组的完全二叉树——Python3实现

最近在复习堆排序的内容,发现基于数组的堆虽然用起来很方便,但打印不方便。所以本文实现了一个简单美观的打印一颗基于数组的完全二叉树的算法(堆就是一种完全完全二叉树嘛,但实现最小堆一般是基于数组的)。

2020-08-01 17:37:39 664

ArcGIS 10.1 破解文件.rar

ArcGIS 10.1 破解文件。在你安装完ArcGIS 10.1 for Desktop.iso后使用的。

2019-05-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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