package org.openstack.atlas.usage.thread.service.serviceImpl; import org.apache.log4j.Logger; import org.openstack.atlas.usage.thread.service.ThreadPoolMonitorService; import org.springframework.stereotype.Service; import java.util.concurrent.ThreadPoolExecutor; @Service public class ThreadPoolMonitorServiceImpl implements ThreadPoolMonitorService { private final Logger log = Logger.getLogger(ThreadPoolMonitorServiceImpl.class); private ThreadPoolExecutor executor; private long monitoringPeriod = 5; private volatile boolean done = false; @Override public void run() { try { while (!done) { monitorThreadPool(); Thread.sleep(monitoringPeriod * 1000); } } catch (Exception e) { log.error(e.getMessage()); } } @Override public void monitorThreadPool() { StringBuilder strBuff = new StringBuilder(); strBuff.append("CurrentPoolSize : ").append(executor.getPoolSize()); strBuff.append(" - CorePoolSize : ").append(executor.getCorePoolSize()); strBuff.append(" - MaximumPoolSize : ").append(executor.getMaximumPoolSize()); strBuff.append(" - ActiveTaskCount : ").append(executor.getActiveCount()); strBuff.append(" - CompletedTaskCount : ").append(executor.getCompletedTaskCount()); strBuff.append(" - TotalTaskCount : ").append(executor.getTaskCount()); strBuff.append(" - isTerminated : ").append(executor.isTerminated()); log.debug(strBuff.toString()); } @Override public ThreadPoolExecutor getExecutor() { return executor; } @Override public void setExecutor(ThreadPoolExecutor executor) { this.executor = executor; } @Override public void shutDown() { done = true; } }