面试题答案
一键面试线程工厂的作用
在Java线程池中,线程工厂(ThreadFactory
)的作用是为线程池创建新线程。它提供了一种灵活的方式来定制线程的创建过程,例如设置线程的名称、优先级、是否为守护线程等属性。通过使用线程工厂,我们可以更好地管理和控制线程池中的线程,满足不同应用场景下对线程的特定需求。
自定义简单线程工厂示例
import java.util.concurrent.ThreadFactory;
public class MyThreadFactory implements ThreadFactory {
private final String prefix;
private int counter = 0;
public MyThreadFactory(String prefix) {
this.prefix = prefix;
}
@Override
public Thread newThread(Runnable r) {
Thread thread = new Thread(r, prefix + "-Thread-" + counter++);
// 设置线程为守护线程(示例,可按需调整)
thread.setDaemon(true);
// 设置线程优先级(示例,可按需调整)
thread.setPriority(Thread.NORM_PRIORITY);
return thread;
}
}
使用自定义线程工厂
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadFactoryUsage {
public static void main(String[] args) {
MyThreadFactory factory = new MyThreadFactory("MyPool");
ExecutorService executorService = Executors.newFixedThreadPool(5, factory);
for (int i = 0; i < 10; i++) {
executorService.submit(() -> {
System.out.println(Thread.currentThread().getName() + " is running.");
});
}
executorService.shutdown();
}
}
在上述代码中:
MyThreadFactory
类实现了ThreadFactory
接口,在newThread
方法中创建新线程,并根据前缀和计数器为线程命名,同时设置了线程为守护线程以及优先级。- 在
ThreadFactoryUsage
类中,创建了MyThreadFactory
的实例,并将其传递给Executors.newFixedThreadPool
方法来创建线程池。这样线程池中的线程就会由自定义的线程工厂创建。