/*
* Copyright (c) 2015 Dell Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.tsdr.spi.scheduler;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This class provides scheduling service to schedule a Task either
* immediately or with a delay.
*
* @author <a href="mailto:yuling_c@dell.com">YuLing Chen</a>
*
* Created: May 4th, 2015
*/
public class SchedulerService {
private static final int ThreadsCount = 10;
private static SchedulerService schedulerService;
private static final Logger log = LoggerFactory.getLogger(SchedulerService.class);
private ScheduledExecutorService scheduler = null;
private SchedulerService(){
scheduler = Executors.newScheduledThreadPool(ThreadsCount);
log.debug("Scheduler Service created the Thread Pool with Threads {}\n" , ThreadsCount);
}
public synchronized static SchedulerService getInstance(){
if(schedulerService==null){
schedulerService = new SchedulerService();
}
return schedulerService;
}
public ScheduledFuture scheduleTask(Task task){
return scheduleTask(task,0L);
}
public ScheduledFuture scheduleTaskAtFixedRate(Task task, long initialDelay, long retryInterval){
final ScheduledFuture<?> scheduledFuture = scheduler.scheduleAtFixedRate(task, initialDelay, retryInterval, TimeUnit.SECONDS);
task.setScheduledFuture(scheduledFuture);
return scheduledFuture;
}
public ScheduledFuture scheduleTask(Task task, long delay){
final ScheduledFuture<?> scheduledFuture = scheduler.schedule(task, delay, TimeUnit.SECONDS);
task.setScheduledFuture(scheduledFuture);
return scheduledFuture;
}
}