1)先创建线程池单例类:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Description: 线程池单例
* @author sunxf
*/
public class ThreadPool {
private static ExecutorService executorservice = Executors.newCachedThreadPool();
public static ExecutorService getThreadPool(){
if(executorservice.isShutdown()||executorservice.isTerminated()){
executorservice = Executors.newCachedThreadPool();
}
return executorservice;
}
}
2) 执行动作:
ThreadPool .getThreadPool().execute(new Runnable(){
public void run() {
System.out.println("这是要处理业务逻辑的地方啦。。。");
}
});
3)自定义pool:
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, RejectedExecutionHandler handler)
当一个任务通过execute(Runnable)方法欲添加到线程池时:
如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。
如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。
如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。
如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。
也就是:处理任务的优先级为:
核心线程corePoolSize、任务队列workQueue、最大线程maximumPoolSize,如果三者都满了,使用handler处理被拒绝的任务。