闽公网安备 35020302035485号
增强线程管理:可以有效控制并发线程的数量,避免大量线程导致系统资源耗尽。
ScheduledExecutorService:继承自ExecutorService,支持任务调度。
public ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
corePoolSize:核心线程数,线程池维护的最少线程数。handler:拒绝策略,当任务无法执行时的处理策略。
线程池的工作过程如下:
线程池初始化:根据corePoolSize初始化核心线程。拒绝策略:若队列已满且当前线程数达到maximumPoolSize,则根据拒绝策略处理新任务。
**execute(Runnable command)**:提交一个任务用于执行,不返回结果。 **submit(Callabletask)**:提交一个任务用于执行,返回一个Future代表任务的结果。线程池的使用示例
import java.util.concurrent.*;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建线程池
ExecutorService executorService = new ThreadPoolExecutor(
2,
4,
60,
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(10),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy());
// 提交任务
for (int i = 0; i < 10; i++) {
executorService.submit(() -> {
try {
System.out.println("Task executed by " + Thread.currentThread().getName());
Thread.sleep(2000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
}
// 堆代码 duidaima.com
// 关闭线程池
executorService.shutdown();
}
}
线程池的拒绝策略DiscardOldestPolicy:丢弃队列中最老的任务,然后提交新任务。
避免任务阻塞:确保任务不长时间阻塞,影响线程池效率。