Executors.newFixedThreadPool()
时间: 2023-12-28 16:23:10 浏览: 68
`Executors.newFixedThreadPool()`是Java中的一个线程池创建方法,它返回一个固定大小的线程池,该线程池中的线程数量是固定的,不会随着任务数量的增加而增加。当所有线程都处于活动状态时,新的任务将在队列中等待。如果某个线程由于执行异常而终止,那么新的线程将替代它执行后续的任务。该方法的语法如下:
```java
public static ExecutorService newFixedThreadPool(int nThreads)
```
其中,`nThreads`表示线程池中的线程数量。
相关问题
Executors.newFixedThreadPool
引用中的源码展示了`Executors`类中的`newFixedThreadPool`方法的实现。该方法返回一个`ThreadPoolExecutor`对象,它是一个固定大小的线程池。通过参数可以指定线程池的大小,同时使用了`LinkedBlockingQueue`作为任务队列。中提到,`newFixedThreadPool`返回的`ThreadPoolExecutor`对象被`FinalizableDelegatedExecutorService`包装,而`newSingleThreadExecutor`返回的`ThreadPoolExecutor`对象也是被包装过的。这些包装类都实现了`ThreadPoolExecutor`接口。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Java 中 Executors.newSingleThreadExecutor() 与Executors.newFixedThreadPool(1)有什么区别](https://blog.csdn.net/lisheng19870305/article/details/118386729)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
Executors.newFixedThreadPool 用法
`Executors.newFixedThreadPool` 是 Java 中用于创建固定大小的线程池的工厂方法。它返回一个 `ExecutorService` 对象,该对象可以用于执行多个任务。
使用 `Executors.newFixedThreadPool` 的基本语法如下:
```java
ExecutorService executor = Executors.newFixedThreadPool(int nThreads);
```
其中,`nThreads` 是要创建的线程池中的线程数量。
以下是使用 `Executors.newFixedThreadPool` 的几个要点:
1. 创建线程池后,线程池中的线程数是固定的,不会随着任务的增加而增加。
2. 如果提交的任务数量超出线程池大小,那么多余的任务将被放入队列中等待执行。
3. 如果队列已满,且所有线程都正在执行任务,则新提交的任务将等待,直到有空闲线程可用。
4. 线程池中的线程可以重用,以执行多个任务。
5. `ExecutorService` 提供了一些方法来提交任务并获得执行结果,如 `submit()` 和 `invokeAll()`。
以下是一个简单的示例代码,演示了如何使用 `Executors.newFixedThreadPool`:
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class FixedThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小为 5 的线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
// 提交 10 个任务给线程池执行
for (int i = 0; i < 10; i++) {
final int taskId = i;
executor.submit(new Runnable() {
public void run() {
System.out.println("Task " + taskId + " is being executed.");
}
});
}
// 关闭线程池
executor.shutdown();
}
}
```
在上述示例中,我们创建了一个固定大小为 5 的线程池,并提交了 10 个任务给线程池执行。每个任务打印了自己的任务ID。最后,我们调用 `executor.shutdown()` 来关闭线程池。
希望这可以帮助到你!如果你有更多问题,请随时提问。
阅读全文