如何设置Eclipse Job执行的顺序?

时间:2012-02-02 09:40:04

标签: java eclipse-rcp jobs job-scheduling

我有2个方法包含selft作业,例如

protected void method1(){
 String name=getName();//return name based on combobox selection
 Job job= new Job("first job"){
            @Override
            protected IStatus run(IProgressMonitor monitor) {
            someActions();
      }
   }
}

protected void method2(){
 String name=getName();//return name based on combobox selection
 Job job= new Job("second job"){
            @Override
            protected IStatus run(IProgressMonitor monitor) {
            someActions();
      }
   }
}

method1和method2可以调用seperated.With自己的进度条

我还有一些按钮来调用两种方法

 btnUpdate.addListener(SWT.MouseUp, new Listener() {

            @Override
            public void handleEvent(Event event) {
                         method1();
                         method2();
                    }
     }

但是这个结构工作不正确因为来自method2()的作业从早期开始执行然后从method1()完成了作业。此外,如果我将method1()中的作业标记为join,则method2()将不会启动,直到method1()执行,但进度条不显示

如何让它正常工作?)

1 个答案:

答案 0 :(得分:2)

通过设置作业规则防止2个作业同时运行:

public class Mutex implements ISchedulingRule {

        public boolean contains(ISchedulingRule rule) {
            return (rule == this);
        }

        public boolean isConflicting(ISchedulingRule rule) {
            return (rule == this);
        }

}// Mutex

public static final ISchedulingRule mutex = new Mutex();

为你的两个工作:

job.setRule(<your mutex instance>);

确保两个作业都使用相同的互斥锁实例!

这应该:

  1. 防止2个作业同时运行(如果它们都使用相同的规则)
  2. 按照您安排的顺序执行它们
  3. 顺便说一句:您没有使用job.schedule()安排工作,所以实际上他们甚至不应该使用您发布的代码执行...