Java线程池的执行过程主要包括以下几个步骤:
-
创建线程池:使用
ThreadPoolExecutor
类创建线程池,并设置核心线程数、最大线程数、队列容量、保持存活时间等参数。 -
提交任务:将任务(通常实现
Runnable
或Callable
接口)提交给线程池。 -
判断核心线程是否已满:如果当前运行的线程数量小于核心线程数,则创建一个新线程来执行任务。
-
任务队列:如果核心线程数已满,但线程池未达到最大线程数,则任务会被放入任务队列中等待执行。
-
创建非核心线程:如果队列已满,则创建新的线程执行任务(最大线程数),如果再创建新线程数已达到限制,则执行拒绝策略。
以下是一个创建线程池并提交任务的简单示例代码:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;public class ThreadPoolExample {public static void main(String[] args) {// 创建固定大小的线程池ExecutorService executorService = Executors.newFixedThreadPool(5);// 提交任务for (int i = 0; i < 10; i++) {Runnable task = () -> System.out.println("Executing task " + Thread.currentThread().getName());executorService.execute(task);}// 关闭线程池executorService.shutdown();}
}
在这个例子中,我们创建了一个固定大小的线程池,能够同时执行最多5个任务。然后我们提交了10个简单的任务,线程池会根据它的执行过程来处理这些任务。最后,当所有任务完成后,我们调用shutdown()
来关闭线程池。