java比较规范好用的线程池
时间: 2023-08-13 15:09:23 浏览: 42
Java提供了一个内置的Executor框架,其中包括ThreadPoolExecutor类,这是一个非常常用的线程池实现。ThreadPoolExecutor可以让你控制线程的数量,以及如何处理超出线程池容量的任务,还可以设置任务队列,以便在任务无法立即执行时将其排队。此外,Java还提供了Executors类,它提供了一些工厂方法来创建常用的线程池实现,例如FixedThreadPool和CachedThreadPool。这些线程池实现已经经过了广泛测试,是非常规范和好用的。但需要注意的是,线程池的使用需要根据具体的场景和需求进行调整和优化。
相关问题
java实现阿里规范的手动创建线程池
要在Java中手动创建符合阿里规范的线程池,您可以使用`java.util.concurrent.ThreadPoolExecutor`类进行自定义配置。以下是一个示例:
```java
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) {
int corePoolSize = 5; // 核心线程数
int maxPoolSize = 10; // 最大线程数
long keepAliveTime = 60; // 线程空闲时间(秒)
int queueCapacity = 100; // 阻塞队列容量
ThreadFactory threadFactory = Executors.defaultThreadFactory(); // 线程工厂
RejectedExecutionHandler rejectedExecutionHandler = new ThreadPoolExecutor.AbortPolicy(); // 拒绝策略
// 创建线程池
ThreadPoolExecutor executor = new ThreadPoolExecutor(
corePoolSize,
maxPoolSize,
keepAliveTime,
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(queueCapacity),
threadFactory,
rejectedExecutionHandler
);
// 提交任务给线程池
for (int i = 0; i < 10; i++) {
Runnable worker = new WorkerThread("Task " + (i + 1));
executor.execute(worker);
}
// 关闭线程池
executor.shutdown();
try {
if (!executor.awaitTermination(10, TimeUnit.SECONDS)) {
executor.shutdownNow();
}
} catch (InterruptedException e) {
executor.shutdownNow();
Thread.currentThread().interrupt();
}
System.out.println("所有任务已完成");
}
}
class WorkerThread implements Runnable {
private String taskName;
public WorkerThread(String taskName) {
this.taskName = taskName;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " 开始执行任务: " + taskName);
// 执行任务的逻辑代码
System.out.println(Thread.currentThread().getName() + " 完成任务: " + taskName);
}
}
```
在上面的示例中,我们手动创建了一个线程池,其中包括了一些符合阿里规范的配置:
- 核心线程数为5,最大线程数为10;
- 线程空闲时间为60秒,超过空闲时间的线程将被回收;
- 阻塞队列容量为100,超过容量的任务将被拒绝执行;
- 使用默认的线程工厂和拒绝策略;
- 在关闭线程池时,使用`awaitTermination()`方法等待最多10秒钟,如果超时仍有任务未完成,则强制关闭线程池。
请注意,这只是一个示例,您可以根据自己的需求进行适当的调整。
写一个符合阿里巴巴规范的Java线程池
以下是一个符合阿里巴巴规范的Java线程池示例:
```java
import java.util.concurrent.*;
public class AlibabaThreadPoolExample {
public static void main(String[] args) {
// 创建线程池
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
5, // 核心线程数
10, // 最大线程数
60, // 线程空闲时间
TimeUnit.SECONDS, // 时间单位
new LinkedBlockingQueue<>(100), // 任务队列
Executors.defaultThreadFactory(), // 线程工厂
new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
);
// 提交任务给线程池
threadPool.execute(() -> {
// 执行任务逻辑
System.out.println("Hello, Alibaba Thread Pool!");
});
// 关闭线程池
threadPool.shutdown();
}
}
```
这个示例使用`ThreadPoolExecutor`类创建了一个符合阿里巴巴规范的线程池。它具有核心线程数为5,最大线程数为10,线程空闲时间为60秒,任务队列容量为100,使用默认的线程工厂和拒绝策略。您可以根据需要进行调整。在示例中,我们向线程池提交了一个简单的任务,并在任务中输出了一条信息。最后,我们关闭了线程池。