package net.jxta.impl.util.threads;
import java.util.concurrent.Callable;
import java.util.concurrent.ScheduledExecutorService;
import java.util.logging.Level;
import net.jxta.logging.Logging;
public class QueueTimeRunMetricsWrapper<T> extends RunMetricsWrapper<T> {
private long scheduleTime;
public QueueTimeRunMetricsWrapper(ScheduledExecutorService longTaskMonitor, Callable<T> wrapped) {
super(longTaskMonitor, wrapped);
this.scheduleTime = System.currentTimeMillis();
}
public QueueTimeRunMetricsWrapper(ScheduledExecutorService longTaskMonitor, Runnable wrapped) {
super(longTaskMonitor, wrapped);
this.scheduleTime = System.currentTimeMillis();
}
@Override
public T call() throws Exception {
long queuedTime = System.currentTimeMillis() - scheduleTime;
if(queuedTime > 2000 && Logging.SHOW_WARNING && SharedThreadPoolExecutor.LOG.isLoggable(Level.WARNING)) {
SharedThreadPoolExecutor.LOG.log(Level.WARNING, "task of type [{0}] queued for {1}ms!", new Object[] { getWrappedType(), queuedTime });
}
return super.call();
}
}