newfixedthreadpool线程池达到最大值怎么办,底层原理
时间: 2023-03-16 19:44:44 浏览: 98
当线程池的线程数量达到最大值时,应该根据具体情况采取相应的行动,例如使用拒绝策略(RejectionPolicy)拒绝新任务,或者等待之前提交的任务完成,再添加新任务。底层原理是,线程池会检查当前活动线程的数量是否超过其设置的最大线程数,如果超过,则会根据具体的拒绝策略来决定如何处理新任务。
相关问题
Executors.newFixedThreadPool 线程池设置名称
你可以使用以下代码来创建一个带有名称的固定大小线程池:
```java
ExecutorService executor = Executors.newFixedThreadPool(n, new ThreadFactory() {
private AtomicInteger count = new AtomicInteger(0);
@Override
public Thread newThread(Runnable r) {
return new Thread(r, "MyThreadPool-" + count.incrementAndGet());
}
});
```
其中,`n` 是线程池的大小,`ThreadFactory` 是用于为线程池中的每个线程创建一个对应的线程对象的工厂类。在上述代码中,我们创建了一个匿名内部类实现了 `ThreadFactory` 接口,并在 `newThread` 方法中为每个线程设置了名称。名称的格式是 `MyThreadPool-1`、`MyThreadPool-2`、`MyThreadPool-3` 等等。
用Java写一个executors.newfixedthreadpool线程池用法
好的,下面是用Java写一个executors.newfixedthreadpool线程池的用法:
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class FixedThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池,大小为3
ExecutorService executor = Executors.newFixedThreadPool(3);
// 提交10个任务给线程池执行
for (int i = 1; i <= 10; i++) {
// 创建任务
Runnable task = new Task(i);
// 提交任务给线程池执行
executor.submit(task);
}
// 关闭线程池
executor.shutdown();
}
}
// 任务类
class Task implements Runnable {
private int taskId;
public Task(int id) {
this.taskId = id;
}
@Override
public void run() {
System.out.println("Task #" + this.taskId + " is running in " + Thread.currentThread().getName());
}
}
```
在这个示例中,我们使用`ExecutorService`接口创建了一个固定大小为3的线程池。然后,我们提交了10个任务给线程池执行。每个任务都是一个`Task`对象,实现了`Runnable`接口,用于执行具体的业务逻辑。在`run`方法中,我们打印了当前任务的编号和执行线程的名称。最后,我们调用`shutdown`方法关闭线程池。