import org.apache.log4j.Logger;
import java.util.concurrent.ThreadPoolExecutor;
/**
* Thread monitoring its' ThreadPoolExecutor.
*
* @author Thibault Helsmoortel
*/
public class MonitorThread implements Runnable {
private static final Logger LOGGER = Logger.getLogger(MonitorThread.class);
private ThreadPoolExecutor executor;
private int seconds;
private boolean run = true;
/**
* Class constructor specifying executor and delay.
*/
public MonitorThread(ThreadPoolExecutor executor, int delay) {
this.executor = executor;
this.seconds = delay;
}
/**
* Shuts down this Thread.
*/
public void shutdown() {
this.run = false;
}
@Override
public void run() {
while (run) {
LOGGER.debug(
String.format(
"[monitor] [%d/%d] Active: %d, Completed: %d, Task: %d, isShutdown: %s, isTerminated: %s",
this.executor.getPoolSize(),
this.executor.getCorePoolSize(),
this.executor.getActiveCount(),
this.executor.getCompletedTaskCount(),
this.executor.getTaskCount(),
this.executor.isShutdown(),
this.executor.isTerminated()));
try {
Thread.sleep(seconds * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Comments