import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
public class ThreadFactoryImp implements ThreadFactory {
private AtomicInteger count = new AtomicInteger(0);
@Override
public Thread newThread(Runnable arg0) {
Thread thread = new Thread(arg0);
String threadName = ThreadFactoryImp.class.getSimpleName() + count.addAndGet(1);
thread.setName(threadName);
return thread;
}
}
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
public class RejectedExecutionHandlerImp implements RejectedExecutionHandler {
@Override
public void rejectedExecution(Runnable arg0, ThreadPoolExecutor arg1) {
System.out.println("Task---" + arg0.toString());
new Thread(arg0).start();
}
}
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class ThreadPoolUtil {
private static final ThreadPoolUtil single = new ThreadPoolUtil();
public ThreadPoolUtil() {
}
public static ThreadPoolUtil getInstance() {
return single;
}
public ExecutorService getExecutorService() {
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, 10, 60, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(100), new ThreadFactoryImp(), new RejectedExecutionHandlerImp());
return threadPool;
}
}