newFixedThreadPool
是 Java 中 ExecutorService
的一种实现,它创建了一个固定大小的线程池。当线程池中的线程完成任务后,它们不会立即销毁,而是会进入等待状态,等待新的任务到来。这样可以避免频繁创建和销毁线程带来的性能开销,提高系统资源的利用率。
要使用 newFixedThreadPool
创建一个固定大小的线程池并复用线程,你可以按照以下步骤操作:
- 导入
java.util.concurrent.Executors
类。 - 使用
Executors.newFixedThreadPool(int nThreads)
方法创建一个固定大小的线程池。参数nThreads
表示线程池中的最大线程数。 - 使用
ExecutorService
的submit()
或execute()
方法提交任务到线程池。这些方法会返回一个表示异步计算结果的Future
对象(对于submit()
)或void
(对于execute()
)。 - 当任务完成后,线程不会立即销毁,而是会进入等待状态。当有新的任务到来时,线程池会自动分配一个空闲线程来执行新任务。
下面是一个简单的示例:
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class FixedThreadPoolExample { public static void main(String[] args) { // 创建一个固定大小为 3 的线程池 ExecutorService executorService = Executors.newFixedThreadPool(3); // 提交任务到线程池 for (int i = 0; i < 10; i++) { final int taskNumber = i; Future> future = executorService.submit(() -> { System.out.println("Task " + taskNumber + " is executed by thread " + Thread.currentThread().getName()); try { // 模拟任务执行耗时 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }); } // 关闭线程池 executorService.shutdown(); } }
在这个示例中,我们创建了一个固定大小为 3 的线程池,并提交了 10 个任务。线程池会自动分配线程来执行这些任务,并在任务完成后复用线程。最后,我们调用 shutdown()
方法关闭线程池。