Java 全局线程池
时间: 2025-01-20 15:42:37 浏览: 48
### Java 全局线程池的实现与使用
在 Java 中,全局线程池可以通过 `java.util.concurrent` 包中的类来创建和管理。通常情况下,应用程序会通过 `Executors` 工厂类获取预配置好的线程池实例。
#### 创建固定大小的线程池
为了创建一个具有固定数量工作线程的线程池,可以使用如下代码:
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
ExecutorService executor = Executors.newFixedThreadPool(10);
```
此代码片段定义了一个拥有十个核心线程的工作队列[^1]。
#### 提交任务给线程池执行
一旦有了线程池对象,就可以向其中提交可运行的任务了。下面是一个简单的例子展示如何将多个任务交给线程池处理:
```java
for (int i = 0; i < 100; ++i) {
Runnable worker = new WorkerThread("" + i);
executor.execute(worker); // 将任务加入到线程池中排队等待被执行
}
executor.shutdown(); // 关闭线程池并停止接收新任务
while (!executor.isTerminated()) { } // 等待所有任务完成
System.out.println("Finished all threads");
```
这里展示了怎样循环地往线程池里添加一百个名为 `WorkerThread` 的任务,并最终关闭它以防止更多任务被提交进来。
#### 使用缓存型线程池
如果希望每次提交的新任务都能立即得到服务而无需长时间挂起,则可以选择创建一个无界线程池,在这种模式下,当有新的请求到来时就会新建一个线程;但如果某个线程空闲超过一定时间(默认60秒),则会被回收掉:
```java
ExecutorService cachedPool = Executors.newCachedThreadPool();
cachedPool.submit(new Task());
// ...其他操作...
cachedPool.shutdownNow(); // 强制终止线程池及其内部正在运行的任务
```
这种方式非常适合用于执行大量短期异步任务的应用场景。
对于 Tomcat 这样的服务器环境来说,任何自定义的工厂类以及相应的 Bean 类应当被打包成 JAR 文件放置于 `$CATALINA_HOME/lib` 目录之下,以便让这些资源能够同时被 Catalina 内部组件及 Web 应用程序所访问[^2]。
阅读全文
相关推荐



















