LiteGo源码分析

SmartExecutor

他是一个执行器

Paste_Image.png

通过这个执行器,你可以很轻松的控制一堆任务的执行,

  1. 设置并发的数量
  2. 设置排队的数量
  3. 设置调度策略
  4. 设置过载策略。

基础知识

想要明白 SmartExecutor 是如何运转的,我们首先要明白几个概念。

1. Executor 是什么?

简单的说:

执行器就是一个 可以执行 Runnable 任务的对象。
Executor这个接口提供了一种解耦的方式:每个任务的具体定义,和每个任务的执行相分离。(执行:线程的使用,调度等等)。

具体见我的这篇文章 Excutor(very good)

2. ExecutorService是什么?

litego 中很多思想应该是来自这里。

具体见我的这篇文章 ExecutorService(very good)

一堆任务的控制

你可以把一堆任务抛给 SmartExecutor,怎么抛给它?
如下图,好多种姿势:

Paste_Image.png

最终会都会执行这个方法:

Paste_Image.png

这堆任务怎么管理?
把他们放到集合里面,你想怎么管理,就怎么管理!

你把兔子放到笼子里面,想让哪只出来跑,就让哪知出来跑。
想把兔子放到哪知笼子,就放到哪知笼子。 嘿嘿

litego是这样处理的:

Paste_Image.png
Paste_Image.png

过载策略:

  1. DiscardNewTaskInQueue:把等待队列中的 最后一个任务抛弃掉。
  2. DiscardOldTaskInQueue: 把等待队列中的 第一个任务抛弃掉。
  3. CallerRuns:直接在当前线程中运行。
  4. DiscardCurrentTask:直接抛弃。
  5. ThrowExecption:抛出异常。

现在问题来了:
一个任务执行完毕了,如何去执行等待队列中的下一个任务?
答案就是,一个任务执行完毕,就去等待队列中的下一个任务。
只需要wrap当前的runnable就可以了:

Paste_Image.png

这个思想跟 Executor 官方提供的例子很像。

Paste_Image.png

当去执行等待队列中的任务的时候,就可以控制调度策略了:

Paste_Image.png

针对过载策略,litego这样的处理跟 ThreadPoolExecutor 中RejectedExecutionHandler的处理一个思想:

Paste_Image.png

福利时间

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一.线程安全性 线程安全是建立在对于对象状态访问操作进行管理,特别是对共享的与可变的状态的访问 解释下上面的话: ...
    黄大大吃不胖阅读 4,355评论 0 3
  • GCD调度队列是执行任务的强大工具。调度队列允许您相对于调度者异步或者同步的执行任意代码块。您能够使用调度队列来执...
    坤坤同学阅读 11,653评论 1 3
  • 《分布式任务调度平台XXL-JOB》 一、简介 1.1 概述 XXL-JOB是一个轻量级分布式任务调度框架,其核心...
    许雪里阅读 16,896评论 3 29
  • layout: posttitle: 《Java并发编程的艺术》笔记categories: Javaexcerpt...
    xiaogmail阅读 11,139评论 1 19
  • 我有一个梦想,可能很小,但我却很开心。 我有两个弟弟,你是我的堂弟,12岁那年,你奇迹般的出现在我的世界里。 第一...
    晓晓老师Y阅读 4,119评论 4 2

友情链接更多精彩内容