/*
* <p>
* 版权: ©2011
* </p>
*/
package org.young.isocket.threadpool;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
*
* 扩展线程池基本实现, 在每个任务结束后需要减去任务计数器的值
*
* @author yangjun1120@gmail.com
*/
public class JobThreadPoolExecutor extends ThreadPoolExecutor {
private JobDispatcher jobDispatcher;
public JobThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit,
BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, JobDispatcher jobDispatcher) {
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory);
this.jobDispatcher = jobDispatcher;
}
@Override
protected void afterExecute(Runnable r, Throwable t) {
if (r instanceof Job) {
jobDispatcher.releaseJob((Job) r);
}
}
@Override
protected void beforeExecute(Thread t, Runnable r) {
if (r instanceof Job) {
jobDispatcher.beforeExecuteJob((Job) r);
}
}
}