线程池的 7 大参数整理。
public ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
ThreadPoolExecutor 在创建之初,是不会立即初始化corePoolSize数量的Thread的,而是通过外部request来一个一个的创建,当达到corePoolSize数目之后,就会维持至少corePoolSize数目的Thread在pool中,哪怕他们都处于空闲状态(idle)。corePoolSize >= 0。
maximumPoolSize >= corePoolSize,maximumPoolSize>0
当线程池线程数量超过corePoolSize时,多余的空闲线程会在多长时间内被销毁。
销毁的线程数=maximumPoolSize(最大线程数)-corePoolSize(核心线程数)。
空闲线程存活时间的描述单位,有以下选项:
提交但未执行的任务队列,有以下选项:
线程池创建线程时调用的工厂方法,通过此方法可以设置线程的优先级、线程命名规则以及线程类型(用户线程还是守护线程)等。一般情况下使用默认的,即Executors类的静态方法defaultThreadFactory(),也可以自定义。
import JAVA.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class Test {
public static void mAIn(String[] args) {
// 创建线程工厂
ThreadFactory threadFactory = new ThreadFactory() {
@Override
public Thread newThread(Runnable runnable) {
// 创建线程池中的线程
Thread thread = new Thread(runnable);
// 设置线程名称
thread.setName("Thread-" + runnable.hashCode());
// 设置线程优先级(最大值:10)
thread.setPriority(Thread.MAX_PRIORITY);
//......
return thread;
}
};
// 创建线程池
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
5,
10,
0L,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(10),
threadFactory
);
try{
threadPoolExecutor.submit(new Runnable() {
@Override
public void run() {
Thread thread = Thread.currentThread();
System.out.println(String.format("线程:%s,线程优先级:%d",thread.getName(), thread.getPriority()));
}
});
}catch (Exception e) {
} finally {
threadPoolExecutor.shutdown();
}
}
}
Executors.defaultThreadFactory()
拒绝策略。当线程池的任务超出线程池队列可以存储的最大值之后,执行的策略。
new一个线程池