初始核心线程10,最大线程数30
阻塞队列,最大深度50个
自定义线程名称为:TestThread-xxx(xxx为流水号)
如果执行任务超过maxmumPoolSize+workQueue之和时,直接使用调用线程运行此任务
https://www.cnblogs.com/nele/p/6502750.html
代码如下
public static void main(String[] args) {
class Test implements Runnable{
private int i;
private long ts;
public Test(int i,long ts) {
this.i = i;
this.ts=ts;
}
@Override
public void run() {
try {
Thread.sleep(ts);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
ThreadPoolExecutor executor=new ThreadPoolExecutor(
//初始核心线程
10,
//最大线程
30,
//允许线程闲置时间
30,
//允许线程闲置时间单位
TimeUnit.SECONDS,
//允许最大阻塞任务
new ArrayBlockingQueue<>(50),
//当阻塞任务达到队列长度+最大线程数量时候执行的处理策略(如下是由调用者执行)
new ThreadPoolExecutor.CallerRunsPolicy()
);
for(int i=1;i<=80;i++){
executor.execute(new Test(i,1000));
}
for(int i=81;i<=90;i++){
executor.execute(new Test(i,50));
}
executor.shutdown();
}