热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

blog220203.Eclipseruntime之Job

blog220203.Eclipseruntime之Job缘起JobJobManagerIScheduleRulingIProgressMonitorIRunnableContex


blog220203.Eclipse runtime之Job

  • 缘起
  • Job
  • JobManager
  • IScheduleRuling
  • IProgressMonitor
  • IRunnableContext与IRunnableWithProgress
  • IProgressService
  • job的progressMonitor

本文以eclipse 4.20为参考.


缘起

org.eclipse.core.runtime.jobs.Job代表的是runnable work. Job构造后, 申请进入调度以执行, 由jobManager负责调度schedule, 安排其执行. IScheduleRuling负责协调多个job并发时的同步问题.
IRunnableContext和IProgressService提供了对progressMonitor的支持.

在这里插入图片描述


Job

job具有4态,


  • NONE, 起始前和结束后的状态. 此时, job进入调度后, 则goto WAITING.
  • WAITING, 排队等待执行的状态. 此时, 若安排执行, 则goto RUNNING; 若sleep或delay, 则goto SLEEPING.
  • SLEEPING, 休眠态. 此时, 被唤醒wakeUp, 则重新goto SLEEPING.
  • RUNNING, 执行态. 此时, 执行完毕或cancel, 则goto NONE.

注意, job只能从WAITING才能进入SLEEPING, 而RUNNING只能单向去到NONE. 而job是可以重复schedule的.

job创建完毕后, 调用schedule(), 交由JobManager调度执行.


JobManager

JobManager采用singleton模式, 负责调度执行各jobs. 借助一个worker pool, 分配worker thread执行提交的jobs.
此外, JobManager.progressProvider负责创建progressMonitor. ProgressManager初始化时会将JobManager.progressProvider设置为自己. 从而progressMonitor提供的是ProgressManager.JobMonitor.
JobManager允许为job设置jobGroup, 方便管理.


IScheduleRuling

多个job并发执行时, 如果发生冲突, 则可以借助IScheduleRuling协调.


IProgressMonitor

progressMonitor的目的主要由两个,


  • 进度的反馈, 例如以进度条及时反馈当前任务(activity)执行的进度和状态.
  • 执行过程中允许cancel.

IRunnableContext与IRunnableWithProgress

IRunnableContext的目的是为执行activity提供progressMonitor, 以支持调用IRunnableWithProgress.


IProgressService

progressService增强了IRunnableContext, 提供而来runInUI(), busyCursorWhile(), 和showInDialog().
eclipse workbench使用的是ProgressManager


job的progressMonitor

默认的job.schedule()会在eclipse progress view中显示执行进度.

驽马一架 一花一世界 2022/2/3


推荐阅读
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 动态壁纸 LiveWallPaper:让您的桌面栩栩如生(第二篇)
    在本文中,我们将继续探讨如何开发动态壁纸 LiveWallPaper,使您的桌面更加生动有趣。作为 2010 年 Google 暑期大学生博客分享大赛 Android 篇的一部分,我们将详细介绍 Ed Burnette 的《Hello, Android》第三版中的相关内容,并分享一些实用的开发技巧和经验。通过本篇文章,您将了解到如何利用 Android SDK 创建引人入胜的动态壁纸,提升用户体验。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • 本文探讨了在 SQL Server 2012 的 Integration Services 项目中配置 ADO.NET 源时遇到的错误及其解决方案。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • 字节码开发笔记:深入解析与应用技巧 ... [详细]
  • 本文源自极分享,详细内容请参阅原文。技术债务如同信用卡负债,随着时间推移,修复成本会越来越高,因此程序员必须对此有深刻认识。此外,团队应致力于培养一种持续维护和优化代码的文化,以减少技术债务的累积。 ... [详细]
author-avatar
欧罗巴法域_430
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有