作者:欧罗巴法域_430 | 来源:互联网 | 2023-08-29 22:22
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