ThreadPoolExecutor定义
ThreadPoolExecutor是Java标准库中的一个类,用于实现线程池。
ThreadPoolExecutor作用
ThreadPoolExecutor作用:可以创建一个固定大小的线程池,用于管理一组线程,可以重复使用这些线程来执行多个任务,以减少线程创建和销毁的开销。
ThreadPoolExecutor构造函数
ThreadPoolExecutor的构造函数可以接收四个参数:核心线程数、最大线程数、空闲线程存活时间和任务队列。
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { }
Java线程池的参数说明,如下所示:
ThreadPoolExecutor使用示例
创建了一个固定大小为5的线程池,向线程池中提交了10个任务,每个任务都会在一个独立的线程中执行。
如下所示:
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; public class ThreadPoolExecutorExample { public static void main(String[] args) { // 创建一个固定大小为5的线程池 ExecutorService executor = Executors.newFixedThreadPool(5); // 向线程池中提交10个任务 for (int i = 0; i < 10; i++) { executor.execute(new Task(i)); } // 关闭线程池 executor.shutdown(); } private static class Task implements Runnable { private int taskId; public Task(int taskId) { this.taskId = taskId; } @Override public void run() { System.out.println("Task #" + taskId + " is running on " + Thread.currentThread().getName()); try { Thread.sleep(1000); // 模拟任务执行时间 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Task #" + taskId + " is completed."); } } }
ThreadPoolExecutor工作原理
ThreadPoolExecutor的工作原理如下:
- 当有新的任务提交到线程池时,线程池会判断当前线程池中的线程数是否小于核心线程数,如果是则创建一个新的线程来执行该任务;如果不是,则将任务放入任务队列中等待执行。
- 当任务队列中有任务等待执行时,线程池会从任务队列中取出一个任务,交给线程池中的空闲线程来执行。
- 如果当前线程池中的线程数已经达到核心线程数,但是任务队列中的任务仍然有未执行的,那么线程池会创建新的线程来执行任务,直到线程数达到最大线程数为止。
- 当线程池中的线程数超过核心线程数时,空闲线程的存活时间会受到控制,超过指定时间的线程会被销毁,以减少资源的占用。
- 当任务执行完成后,线程会将执行结果返回给线程池,线程池将执行结果保存到一个Future对象中,供调用者获取。
以上就是ThreadPoolExecutor详解,更多线程池内容,请查看:Java线程池(万字图文详解)
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》