import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.*;
public class FFMpegThreadPool {
private FFMpegThreadPool(){
}
private static ThreadPoolExecutor executor = null;
private final static BlockingQueue queue = new ArrayBlockingQueue(1024);
private final static ThreadPoolExecutor.DiscardPolicy discardPolicy = new ThreadPoolExecutor.DiscardPolicy();
private final static int coreSize = 20;
private final static int maxSize = 100;
private final static int timeOut = 1;
static {
executor = new ThreadPoolExecutor(coreSize,maxSize,timeOut,TimeUnit.MINUTES, queue,discardPolicy);
}
public static ThreadPoolExecutor getThreadPool() {
FFMpegThreadPool.logPoolStatus();
return FFMpegThreadPool.executor;
}
public static Future submit(Runnable runnable){
logPoolStatus();
return FFMpegThreadPool.executor.submit(runnable);
}
public static void logPoolStatus(){
log.info("number of threads that are actively : {}",FFMpegThreadPool.executor.getActiveCount());
//log.info("FFMpegThreadPool.executor:{}", JsonUtil.toJSON(executor));
log.info("ArrayBlockingQueue.remainingCapacity : {}",queue.remainingCapacity());
}
public static void shutdownNow(){
FFMpegThreadPool.executor.shutdownNow();
}
}