我记得有这个配置的,不过有好久没用过了。如果不能配置,那你就用synchronized手工同步一下就可以了。

解决方案 »

  1.   

    需要引入Spring才可以配置这个参数吧
      

  2.   


    我记得有这个配置的,不过有好久没用过了。如果不能配置,那你就用synchronized手工同步一下就可以了。
    用synchronized ? 那需要创建一个静态变量,对这个静态变量加锁实现?quartz每次触发一个任务都是会新建一个对象的,只能对静态变量synchronized? 这样做也不太好吧,最坏的情况可能是第一次启动任务执行了很久,接连第二次,第三次启动,都会请求这个锁,这种实现也不好,除非用一个超时锁。
      

  3.   


    这种方法可行,根据我的理解应该在每个Job中有一个静态的线程池对象,每个任务要继承Runnable或Callable接口,大概需要这么实现:
    public class JobTwo implements Job{ private  static ThreadPoolExecutor pool=(ThreadPoolExecutor)Executors.newCachedThreadPool();

    @Override
    public void execute(JobExecutionContext context)
    throws JobExecutionException {
    BlockingQueue<Runnable> queue = pool.getQueue();
    if(queue.size()>0){
    System.out.println("前一次任务未执行完成跳过本次任务");
    return;
    }
    pool.submit(new RealJob());

    }


    class RealJob implements Runnable{ /**
     * 任务的执行主题
     */
    @Override
    public void run() {

    //ToDo 任务的业务逻辑

    }

    }}
    有没有方法可以获取Scheduler调度用的线程池看了接口好像也没,谢谢指导。
      

  4.   

    真怀疑你没看过官方的文档。有个statefulejob ,就是你这个用途