Mercurial > hg > digilib-old
view servlet/src/digilib/util/DigilibJobCenter.java @ 636:7049579a0097 jquery
last and next page works now
implemented redisplay function (only tested with fullscreen)
parameters that are changed need to be in data.queryParams to get in the url on redisplay
| author | robcast |
|---|---|
| date | Tue, 18 Jan 2011 21:30:03 +0100 |
| parents | fd2ef7e46119 |
| children | 587c90bc5976 |
line wrap: on
line source
/** Wrapper around ExecutionService. * */ package digilib.util; import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.ThreadPoolExecutor; import org.apache.log4j.Logger; /** Wrapper around ExecutionService. * * @author casties * */ public class DigilibJobCenter<V> { /** general logger for this class */ private static Logger logger = Logger.getLogger("digilib.jobcenter"); /** ExecutorService */ private ExecutorService executor; /** max number of running threads */ private int maxThreads = 1; /** max number of waiting threads */ private int maxQueueLen = 50; /** label for this job center */ private String label = ""; /** Create a DigilibJobcenter with the given number of threads and queue length. * If prestart=true it starts the threads in the thread pool. * * @param maxThreads * @param maxQueueLen * @param prestart * @param label */ public DigilibJobCenter(int maxThreads, int maxQueueLen, boolean prestart, String label) { super(); this.label = (label != null) ? label : ""; this.maxThreads = maxThreads; this.maxQueueLen = maxQueueLen; executor = Executors.newFixedThreadPool(maxThreads); if (prestart) { // prestart threads so Tomcat's leak protection doesn't complain int st = ((ThreadPoolExecutor)executor).prestartAllCoreThreads(); logger.debug(label+" prestarting threads: "+st); } } /** Submit job to execute * * @param job * @return Future to control the job */ public Future<V> submit(Callable<V> job) { return executor.submit(job); } /** Returns if the service is overloaded. * * @return */ public boolean isBusy() { int jql = getWaitingJobs(); int jrl = getRunningJobs(); logger.debug(label+" isBusy: waiting jobs="+jql+" running jobs="+jrl); return (jql > maxQueueLen); } /** Returns the number of currently running jobs. * @return */ public int getRunningJobs() { return ((ThreadPoolExecutor)executor).getActiveCount(); } /** Returns the number of currently waiting jobs. * @return */ public int getWaitingJobs() { BlockingQueue<Runnable> jq = ((ThreadPoolExecutor)executor).getQueue(); int jql = jq.size(); return jql; } public void setMaxThreads(int maxThreads) { this.maxThreads = maxThreads; } public int getMaxThreads() { return maxThreads; } public void setMaxQueueLen(int maxQueueLen) { this.maxQueueLen = maxQueueLen; } public int getMaxQueueLen() { return maxQueueLen; } /** Shuts down the Executor. * Tries to stop running threads and returns a list of waiting threads. * * @return */ public List<Runnable> shutdownNow() { return executor.shutdownNow(); } }
