您可以創建新的名爲JobBase例如抽象類,它實現IJob接口,並插入抽象方法: public abstract void ExecuteJob(IJobExecutionContext context);
在JobBase可以實現的方法來執行這樣的
public abstract class JobBase : IJob,IInterruptableJob
{
private Thread currentThread;
private ILog logger;
public JobBase(ILog logger)
{
this.logger=logger;
}
public void Execute(IJobExecutionContext context)
{
var thread = new Thread(()=>
{
try
{
this.ExecuteJob(context);
}
catch(Exception ex)
{
this.logger.ErrorFormat("Unhandled exception {0}",ex.ToString());
}
});
thread.Start();
this.currentThread = thread;
this.currentThread.Join();
}
public abstract void ExecuteJob(IJobExecutionContext context);
public void Interrupt()
{
currentThread.Abort();
}
}
每個作業都將執行JobExecute方法。
public class TestJob :JobBase
{
private ILog logger;
public TeJob(ILog logger):base(logger)
{
}
public override ExecuteJob(IJobExecutionContext context)
{
}
}
假設條件是,利用一些工廠創建工作
停止作業,你會調用方法scheduler.Interrupt(new JobKey(jobName));
我同意我們不能在JAVA中殘酷地殺死Quartz中的工作。另外,同意我們可以通過ExecutorService實現相同的功能。出於我的好奇,它提出了另一個問題,爲什麼Quartz沒有實現ExecutorService,以便他們能夠爲我們提供一種殺死Job的方法?或者Quartz增強功能中有未來計劃。感謝您的澄清,請讓我知道您的想法。 – Kathir
爲什麼它沒有實現可能是因爲它已經被設計爲在jvm中提供這種缺乏的替代方案。它可以與舊的jvms協同工作,如果他們實現了ExecutorService,那麼quartz將與最近的jvm和強制項目進行鏈接 – poussma
可能他們可以通過配置提供額外的或廣泛的支持。通過這種方式,他們可以實現提供向下兼容性以及新...我是否缺少任何東西?無論如何感謝您的時間和解釋... – Kathir