84 lines
2.3 KiB
Java
84 lines
2.3 KiB
Java
package ink.wgink.util.thread;
|
||
|
||
import org.slf4j.Logger;
|
||
import org.slf4j.LoggerFactory;
|
||
|
||
import java.util.concurrent.ExecutorService;
|
||
import java.util.concurrent.SynchronousQueue;
|
||
import java.util.concurrent.ThreadPoolExecutor;
|
||
import java.util.concurrent.TimeUnit;
|
||
|
||
/**
|
||
* @ClassName: CachedThreadPoolUtil
|
||
* @Description: 缓存线程池
|
||
* @Author: wanggeng
|
||
* @Date: 2022/5/20 00:27
|
||
* @Version: 1.0
|
||
*/
|
||
public class CachedThreadPoolUtil {
|
||
|
||
private static final Logger LOG = LoggerFactory.getLogger(CachedThreadPoolUtil.class);
|
||
|
||
/**
|
||
* 最多66个线程,保持60s
|
||
*/
|
||
private static ExecutorService executorService = new ThreadPoolExecutor(0, 66,
|
||
60L, TimeUnit.SECONDS,
|
||
new SynchronousQueue<>());
|
||
|
||
/**
|
||
* 执行线程
|
||
*
|
||
* @param runnable
|
||
*/
|
||
public static void execute(Runnable runnable) {
|
||
LOG.debug("****************** execute");
|
||
executorService.execute(runnable);
|
||
}
|
||
|
||
/**
|
||
* 状态
|
||
*
|
||
* @return
|
||
*/
|
||
public static Status getStatus() {
|
||
ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) executorService;
|
||
return new Status(threadPoolExecutor.getQueue().size(),
|
||
threadPoolExecutor.getActiveCount(),
|
||
threadPoolExecutor.getCompletedTaskCount(),
|
||
threadPoolExecutor.getTaskCount());
|
||
}
|
||
|
||
public static class Status {
|
||
private Integer queueSize;
|
||
private Integer activeCount;
|
||
private Long completedTaskCount;
|
||
private Long totalTaskCount;
|
||
|
||
public Status(Integer queueSize, Integer activeCount, Long completedTaskCount, Long totalTaskCount) {
|
||
this.queueSize = queueSize;
|
||
this.activeCount = activeCount;
|
||
this.completedTaskCount = completedTaskCount;
|
||
this.totalTaskCount = totalTaskCount;
|
||
}
|
||
|
||
public Integer getQueueSize() {
|
||
return queueSize == null ? 0 : queueSize;
|
||
}
|
||
|
||
public Integer getActiveCount() {
|
||
return activeCount == null ? 0 : activeCount;
|
||
}
|
||
|
||
public Long getCompletedTaskCount() {
|
||
return completedTaskCount == null ? 0 : completedTaskCount;
|
||
}
|
||
|
||
public Long getTotalTaskCount() {
|
||
return totalTaskCount == null ? 0 : totalTaskCount;
|
||
}
|
||
}
|
||
|
||
|
||
}
|