用ThreadPoolExecutor创建一个线程池
时间: 2023-10-17 16:06:17 浏览: 87
好的,我可以帮您解答这个问题。您可以通过以下代码创建一个大小为5的线程池:
```java
ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 5, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
```
其中,第一个参数为核心线程数,第二个参数为最大线程数,第三个参数为线程空闲时间,第四个参数为时间单位,第五个参数为等待队列。您可以根据需要调整各个参数。希望能对您有所帮助!
相关问题
通过ThreadPoolExecutor创建一个线程池,给每个任务提供入参,同时使用计数器
在Java中,`ThreadPoolExecutor`是一个强大的工具,用于创建和管理线程池,它可以异步地执行一系列的任务。为了创建一个线程池并为每个任务提供入参,我们可以按照以下步骤操作:
1. **创建ThreadPoolExecutor实例**:
```java
int corePoolSize = 5; // 核心线程数
int maximumPoolSize = 10; // 最大线程数
long keepAliveTime = 60L * 1000; // 线程空闲时间,单位毫秒
int unit = TimeUnit.MILLISECONDS;
ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize,
maximumPoolSize, keepAliveTime, unit,
new ArrayBlockingQueue<>(100)); // 使用缓冲队列作为任务存储
```
这里设置了核心线程数为5,最大线程数为10,当任务到来而所有核心线程都忙碌时,会排队等待。
2. **提交任务并提供入参**:
```java
Runnable worker = () -> {
Object inputArgument = ...; // 这里是你要传递给任务的具体入参
// 在这里处理输入参数和任务逻辑
System.out.println("Task started with input " + inputArgument);
};
executor.execute(worker); // 提交任务到线程池
```
对于需要返回结果的函数,可以使用`Callable`而不是`Runnable`,然后用Future获取结果。
3. **计数器**:
如果你想追踪已提交的任务数量,可以创建一个单独的计数器变量并同步更新它:
```java
private AtomicInteger taskCounter = new AtomicInteger(0);
public void submit(Runnable worker) {
taskCounter.incrementAndGet();
executor.execute(worker);
}
public int getTaskCount() {
return taskCounter.get();
}
```
使用ThreadPoolExecutor创建单例线程池 java
使用ThreadPoolExecutor创建单例线程池的方法可以参考引用[2]中的代码。在这个例子中,通过静态内部类的方式创建了一个SingletonHolder类,该类中包含了一个ExecutorService类型的threadPool变量,用于存储线程池实例。在newInstance()方法中,直接返回了threadPool变量,确保了线程池的单例性。这种方式可以保证在多线程环境下只创建一个线程池实例,避免了资源浪费和线程安全问题。
阅读全文