import java.util.concurrent.*;
public class T2 {
public static void main(String[] args) {
//定义线程池
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
2,
4,
1,
TimeUnit.MINUTES,
getQuery(),//BlockingQueue<Runnable> workQueue,
new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
return null;
}
},
//AbortPolicy -- 当任务添加到线程池中被拒绝时,它将抛出 RejectedExecutionException 异常。
new ThreadPoolExecutor.AbortPolicy()
//CallerRunsPolicy -- 当任务添加到线程池中被拒绝时,会在线程池当前正在运行的Thread线程池中处理被拒绝的任务。
// new ThreadPoolExecutor.CallerRunsPolicy()
//DiscardOldestPolicy -- 当任务添加到线程池中被拒绝时,线程池会放弃等待队列中最旧的未处理任务,然后将被拒绝的任务添加到等待队列中。
// new ThreadPoolExecutor.DiscardOldestPolicy()
//DiscardPolicy -- 当任务添加到线程池中被拒绝时,线程池将丢弃被拒绝的任务。
// new ThreadPoolExecutor.DiscardPolicy()
);
//运行线程池
Runnable runnable=null;
threadPoolExecutor.execute(runnable);
threadPoolExecutor.shutdown();
}
static <T> BlockingQueue<T> getQuery(){ //此处的T为 Runnable类型
ArrayBlockingQueue<T> arrayBlockingQueue = new ArrayBlockingQueue<>(10); // 数组实现:new Object[capacity]; 有界队列
LinkedBlockingDeque<T> linkedBlockingDeque = new LinkedBlockingDeque<>();//链表实现:class Node<E>{}; 无界队列
SynchronousQueue<T> synchronousQueue = new SynchronousQueue<>();//此容器不会存储数据,必须有另一个线程正在等待接收这个元素。同步移交队列
PriorityBlockingQueue<Object> priorityBlockingQueue = new PriorityBlockingQueue<>();//PriorityBlockingQueue是一个无界的基于数组的优先级阻塞队列
return null;//选择一个进行返回
}
}
自定义参数创建线程池ThreadPoolExecutor
于 2023-02-21 16:19:20 首次发布
该代码示例展示了如何创建一个JavaThreadPoolExecutor,配置包括核心线程数、最大线程数、存活时间、时间单位以及拒绝策略。四种不同的拒绝策略包括AbortPolicy、CallerRunsPolicy、DiscardOldestPolicy和DiscardPolicy,分别在任务被拒绝时有不同的处理方式。此外,还提到了四种不同类型的BlockingQueue实现。
摘要由CSDN通过智能技术生成