threadPoolExecutor 的ThreadFactory 如何使用
时间: 2024-02-04 18:09:38 浏览: 173
ThreadPoolExecutor的ThreadFactory是用于创建线程的工厂类。它定义了如何创建新的线程对象,并且可以自定义线程的属性和行为。
要使用ThreadFactory,需要实现ThreadFactory接口,并重写其中的newThread方法。newThread方法接收一个Runnable对象作为参数,并返回一个新创建的Thread对象。
下面是一个示例代码,演示如何使用ThreadFactory创建线程池:
```java
import java.util.concurrent.*;
public class CustomThreadFactory implements ThreadFactory {
private final String threadNamePrefix;
private final AtomicInteger threadNumber = new AtomicInteger(1);
public CustomThreadFactory(String threadNamePrefix) {
this.threadNamePrefix = threadNamePrefix;
}
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r, threadNamePrefix + threadNumber.getAndIncrement());
// 设置线程属性,例如优先级、守护线程等
t.setPriority(Thread.NORM_PRIORITY);
t.setDaemon(false);
return t;
}
}
public class Main {
public static void main(String[] args) {
// 创建自定义的ThreadFactory
ThreadFactory threadFactory = new CustomThreadFactory("MyThread-");
// 创建线程池,并指定ThreadFactory
ThreadPoolExecutor executor = new ThreadPoolExecutor(
5, 10, 1, TimeUnit.MINUTES, new LinkedBlockingQueue<>(), threadFactory);
// 提交任务给线程池执行
executor.execute(() -> {
System.out.println("Task executed by " + Thread.currentThread().getName());
});
// 关闭线程池
executor.shutdown();
}
}
```
在上面的示例中,我们创建了一个CustomThreadFactory类,实现了ThreadFactory接口,并重写了newThread方法。在newThread方法中,我们创建了一个新的Thread对象,并设置了线程的名称、优先级和守护线程属性。
然后,在主函数中,我们创建了一个ThreadPoolExecutor对象,并传入自定义的ThreadFactory。通过execute方法提交一个任务给线程池执行,任务会由自定义的线程池中的线程来执行。
阅读全文