建设班级网站首页,4d网站广告图用什么做的,旧房翻新装修哪家公司好,广州网站建设乛新科送推广1. 线程池的基本概念
线程池由以下几个主要组件构成#xff1a;
任务队列#xff08;Task Queue#xff09;#xff1a; 用于存储等待执行的任务。工作线程池#xff1a; 用于执行任务的线程集合。线程工厂#xff08;Thread Factory#xff09;#xff1a; 用于创建…1. 线程池的基本概念
线程池由以下几个主要组件构成
任务队列Task Queue 用于存储等待执行的任务。工作线程池 用于执行任务的线程集合。线程工厂Thread Factory 用于创建新线程的工厂。拒绝策略Rejected Execution Handler 定义了当任务被拒绝时的处理策略。
2. 线程池的参数
2.1 核心线程数Core Pool Size
核心线程数是线程池中一直存活的线程数量即使它们处于空闲状态也不会被销毁。
2.2 最大线程数Maximum Pool Size
最大线程数是线程池中允许的最大线程数量包括活动和空闲线程。
2.3 线程空闲时间Keep Alive Time
线程空闲时间是非核心线程在空闲状态下被保留的时间超过这个时间就会被销毁直到线程数达到核心线程数为止。
2.4 时间单位Time Unit
时间单位用于指定线程空闲时间的单位可以是秒、毫秒等。
2.5 任务队列Blocking Queue
任务队列用于存储等待执行的任务可以是有界队列或无界队列。
2.6 线程工厂Thread Factory
线程工厂用于创建新的线程可以自定义线程的名称、优先级等属性。
2.7 拒绝策略Rejected Execution Handler
拒绝策略定义了当任务无法被接受时的处理方式例如抛出异常、丢弃任务等。
3. 拒绝策略
Java线程池提供了四种拒绝策略
3.1 AbortPolicy
抛出RejectedExecutionException异常默认策略。
ThreadPoolExecutor executor new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, timeUnit, blockingQueue, threadFactory, new ThreadPoolExecutor.AbortPolicy()
);3.2 CallerRunsPolicy
使用调用线程执行被拒绝的任务。
ThreadPoolExecutor executor new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, timeUnit, blockingQueue, threadFactory, new ThreadPoolExecutor.CallerRunsPolicy()
);3.3 DiscardOldestPolicy
丢弃队列中最老的任务然后重新尝试执行任务不推荐。
ThreadPoolExecutor executor new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, timeUnit, blockingQueue, threadFactory, new ThreadPoolExecutor.DiscardOldestPolicy()
);3.4 DiscardPolicy
直接丢弃被拒绝的任务。
ThreadPoolExecutor executor new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, timeUnit, blockingQueue, threadFactory, new ThreadPoolExecutor.DiscardPolicy()
);4. 完整示例
import java.util.concurrent.*;public class ThreadPoolExample {public static void main(String[] args) {int corePoolSize 2;int maximumPoolSize 5;long keepAliveTime 1;TimeUnit timeUnit TimeUnit.SECONDS;BlockingQueueRunnable blockingQueue new LinkedBlockingQueue();ThreadFactory threadFactory Executors.defaultThreadFactory();RejectedExecutionHandler rejectedExecutionHandler new ThreadPoolExecutor.AbortPolicy();ThreadPoolExecutor executor new ThreadPoolExecutor(corePoolSize,maximumPoolSize,keepAliveTime,timeUnit,blockingQueue,threadFactory,rejectedExecutionHandler);// 提交任务给线程池for (int i 0; i 10; i) {final int taskIndex i;executor.execute(() - {System.out.println(Thread: Thread.currentThread().getName() , executing task taskIndex);try {Thread.sleep(2000); // 模拟任务执行时间} catch (InterruptedException e) {e.printStackTrace();}});}// 关闭线程池executor.shutdown();}
}在这个例子中我们创建了一个线程池并提交了10个任务给线程池执行。可以根据实际需要调整线程池的参数和拒绝策略。