呼延十

还记得年少时的梦吗

(juc系列)scheduledthreadpoolexecutor源码阅读

前言 这是Java中常用的另外一个线程池,主要用于实现任务的延迟执行及周期性执行. 听起来与Timer很相似,但是比Timer更加健壮,灵活一些。 简介 官方注释翻译: 一个可以延迟执行命令,或者周期性执行命令的ThreadPoolExecutor. 如果需要多个工作线程,这个类就比Timer更加好用了,或者当你需要比Timer更加灵活,健壮的线程池时,也使用这个类. ...

(juc系列)runnable与future等异步设计

这是JUC包中,与Future异步等相关的类图. 简单的介绍以及记录. 偏意识流. 首先看一下最基本的Runnable Runnable Runable接口, 应该由那些想要被线程执行的类来实现.它定义了一个无参数,无返回值的run()方法,负责运行代码段. 通俗点理解,Runnable接口,定义了可被运行这个概念。定义一个类,实现Runnable,将运行逻辑写入run方法,那...

(juc系列)completionservice源码阅读

前言 线程池的另外一种实现,根据任务完成的顺序处理任务,而不是提交的顺序. 经常用在一些轻量级的任务处理上,或者追求更高的程序性能. 举几个常见的例子: 多个任务,耗时不等. 不依赖于提交顺序. 此时希望提交任务后,主线程能尽快的开始处理结果. 提交多个任务,耗时不等,只需要获取一个结果,之后其余的任务结果都被忽略. 此时也需要尽快拿到第一个完成的任务的结果. 简介 ...

(juc系列)forkjoin框架源码学习

本文源码基于: JDK 13 简介 JUC系列提供的又一个线程池,采用分治思想,及工作窃取策略,能获得更高的并发性能. 分治思想 通过将大任务,切割成小任务并发执行,由每一个任务等待所有子任务的返回. 大概可以理解为递归的思路. 比如要计算1~100的累加和. 那么任务: sum(1,100). 首先不断的切分,直到单个任务足够小,然后并发运行,之后再进行join收集操作....

(juc系列)executors类的工厂方法

本文源码基于: JDK13 简介 提供一些工厂方法和工具类方法. 给Executor,ExecutorService,ScheduledExecutorService和ThreadFacotry使用. Callable类在这里定义. 这个类提供以下几种方法: 用一些常用的参数设置,创建一个新的ExecutorService返回. 约等于ExecutorService的几个工厂方...

(juc系列)threadpoolexecutor源码学习

本文源码基于: JDK13 前言 其实早在19年,就简单的写过ThreadPoolExecutor. 但是只涉及到了其中两个参数,理解也不深刻,今天重新看一下代码。 简介 这个类是Java中常用的线程池的一个类,相关的类图: 继承自父类: AbstractExecutorService,实现了Executor和ExecutorService接口. 使用一些池化的线程来执行每一...

(juc系列)exchanger源码阅读

本文源码基于: JDK13 简介 一个用于让线程之间配对和交换元素的同步点. 每个线程拿出一个元素,匹配另外一个伙伴线程, 互相交换. Exchanger可以看做是一个双向的SynchronousQueue. 这个类在遗传算法和流水线设计时很有用. 示例 这个类使用Exchanger来在线程之间交换缓冲区. class FillAndEmpty { Exchanger&...

(juc系列)phaser源码学习

本文源码基于: JDK13 简介 老规矩,下面是官方注释的简单翻译版本,追求速度,都不一定通顺. 谨慎阅读. 一个可复用的同步屏障,功能上类似于CyclicBarrier和CountDownLatch,但是支持更多灵活的用法. 登记 与其他同步屏障不同的是,Phaser的数量是可以各自不同的. 使用方应该使用register或者bulkRegister来进行注册.或者以构造方法的形...