gpt4 book ai didi

java - Eclipse RCP IJob : Limit numer of concurrent executing jobs

转载 作者:行者123 更新时间:2023-11-30 09:09:33 28 4
gpt4 key购买 nike

我如何告诉 Eclipse RCP 作业管理最多同时运行 x 个作业?

编辑:

它通过使用答案中描述的自定义调度规则来工作。

重要的是永远不要将相同的规则引用传递给多个作业。

这是我使用的类:

公共(public)类 JobMaster {

private class Listener implements IJobChangeListener {

@Override
public void aboutToRun(final IJobChangeEvent event) {
}

@Override
public void awake(final IJobChangeEvent event) {
}

@Override
public void done(final IJobChangeEvent event) {
synchronized (JobMaster.this) {
running--;
System.err.println("now running " + running);
}
}

@Override
public void running(final IJobChangeEvent event) {
synchronized (JobMaster.this) {
running++;
System.err.println("now running " + running);
}
}

@Override
public void scheduled(final IJobChangeEvent event) {

}

@Override
public void sleeping(final IJobChangeEvent event) {
}

}

private class MyRule implements ISchedulingRule {

public MyRule() {

}

@Override
public boolean contains(final ISchedulingRule rule) {
if (rule == this) {
return true;
}
return false;

}

@Override
public boolean isConflicting(final ISchedulingRule rule) {
synchronized (JobMaster.this) {
if (rule == this) {
return true;
}
if (rule instanceof MyRule) {
return running >= maxRun;
}
return false;
}
}
}

private final Listener l = new Listener();

private final int maxRun;

private volatile int running = 0;

public JobMaster(final int maxRun) {
this.maxRun = maxRun;

}

public synchronized void add(final Job j) {
j.setRule(new MyRule());
j.addJobChangeListener(l);
j.schedule();
}

最佳答案

从 Eclipse Mars (4.5) 开始,可以使用作业组来限制并发线程数:

JobGroup jobGroup = new JobGroup("Job...", /* maxThreads*/ 10, /* seedJobsCount */ 100);

for (int ii = 0; ii < 100; ii++)
{
Job job = new Job("job name")
{
@Override
protected IStatus run(IProgressMonitor monitor)
{
// do something
return Status.OK_STATUS;
}
};
job.setJobGroup(jobGroup);
job.schedule();
}

jobGroup.join(10000, monitor);

关于java - Eclipse RCP IJob : Limit numer of concurrent executing jobs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23007517/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com