java.util.concurrent.ThreadPoolExecutor 线程工厂设置与否区别
时间: 2023-11-21 11:57:39 浏览: 113
ThreadPoolExecutor是Java中的一个线程池实现类,它可以管理和复用线程,从而提高程序的性能和效率。线程工厂是ThreadPoolExecutor的一个参数,用于创建新线程。如果不设置线程工厂,则默认使用Executors.defaultThreadFactory()方法创建线程。如果设置了线程工厂,则可以自定义线程的创建方式,例如设置线程的名称、优先级等。如果不设置线程工厂,线程的名称将会是“pool-x-thread-y”的形式,其中x是线程池的编号,y是线程的编号。
以下是设置线程工厂和不设置线程工厂的区别:
1. 设置线程工厂可以自定义线程的创建方式,例如设置线程的名称、优先级等。
2. 不设置线程工厂,线程的名称将会是“pool-x-thread-y”的形式,其中x是线程池的编号,y是线程的编号。
3. 如果不设置线程工厂,线程的优先级将会是默认值。
4. 如果设置了线程工厂,可以在创建线程时进行一些额外的操作,例如设置线程的UncaughtExceptionHandler。
下面是一个设置线程工厂的例子:
```java
public class MyThreadFactory implements ThreadFactory {
private final AtomicInteger threadNumber = new AtomicInteger(1);
private final String namePrefix;
public MyThreadFactory(String namePrefix) {
this.namePrefix = namePrefix;
}
public Thread newThread(Runnable r) {
Thread t = new Thread(r, namePrefix + threadNumber.getAndIncrement());
t.setPriority(Thread.NORM_PRIORITY);
t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
System.out.println("Thread " + t.getName() + " threw an exception: " + e);
}
});
return t;
}
}
```
在创建ThreadPoolExecutor时,可以将MyThreadFactory作为参数传入:
```java
ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 20, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), new MyThreadFactory("my-thread-"));
```
这样就可以自定义线程的名称和UncaughtExceptionHandler了。
阅读全文