Executors.newFixedThreadPool 线程池设置名称
时间: 2023-07-08 18:47:42 浏览: 310
你可以使用以下代码来创建一个带有名称的固定大小线程池:
```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`方法关闭线程池。
public class test { public static void main(String[] args) throws UnsupportedEncodingException, InterruptedException { // 创建一个固定大小的线程池 ExecutorService service = Executors.newFixedThreadPool(3); ss t1=new ss(); service.invokeAll(t1); // 关闭启动线程 service.shutdown(); // 等待子线程结束,再继续执行下面的代码 service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS); //System.out.println("all thread complete"); } } class ss implements Callable { @Override public String call() { System.out.println(Thread.currentThread().getName()+"执行call方法"); return null; } }
这段代码是一个Java多线程示例,其中主要涉及了线程池的使用。具体来说,代码中创建了一个固定大小为3的线程池ExecutorService,然后定义了一个实现了Callable接口的类ss,该类的call()方法中输出了当前线程的名称,并返回了一个null值。接着,使用线程池的invokeAll方法来执行该任务,最后等待所有子线程执行完毕后关闭线程池并输出提示信息。该示例主要展示了Java多线程编程中线程池的使用方法。
阅读全文