int corePoolSize = 20;
int maximumPoolSize = 40;
long keepAliveTime = 20;
TimeUnit unit = TimeUnit.SECONDS;
BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(5000);
ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit,
workQueue);
protected void process(Date data) {
executor.execute(new Runnable() {
@Override
public void run() {
try {
long start = new Date().getTime();
//实际处理的方法
handle(data);
long end = new Date().getTime();
log.info("data key :" + data.getKey() + ",time:" + (end - start) + "ms" + ",workQueue size" + workQueue.remainingCapacity());
if (workQueue.remainingCapacity() < 500) {
log.error("work queue nearly full :data key:" + data.getKey() + ",time:" + (end - start) + "ms" + ",workQueue size" + workQueue.remainingCapacity());
}
} catch (Exception e) {
log.error("process error", e);
}
}
});
}
1. 传入的数据Data,要设置唯一key,在日志中打印key
2.剩余线程数不足时,打印错误日志
3.handle(data)是实际的处理方法。