package com.dsfa.bi.dp.web.test.thread;
import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
/**
* @author Huang Zicai
* @date 2022/11/23 19:54
* @desc
**/
public class MainTest {
public static void main(String[] args) {
List<Object> list=new ArrayList<>();
try {
ThreadFactory factory = new CustomizableThreadFactory("xxxxx-xxx%");
//拒绝策略,超过线程数+队列数也添加至队列,不丢弃
RejectedExecutionHandler rejectedExecutionHandler = (r, executor) -> {
if (!executor.isShutdown()) {
try {
System.out.println("====================="+Thread.currentThread().getName()+":拒绝策略生效");
executor.getQueue().put(r);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
ThreadPoolExecutor executor = new ThreadPoolExecutor(
5,//核心线程
12,//最大线程
60,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(1024),
factory,
rejectedExecutionHandler);
for (int i = 0; i < 50; i++) {
//传入一个继承Thread的线程主类
//executor.execute(new ExtendsThread());
executor.execute(() -> {
System.out.println("============"+Thread.currentThread().getName()+":=====线程进入");
try {
for (int j = 0; j < 6; j++) {
System.out.println("============"+Thread.currentThread().getName()+":=====线程正在執行");
Thread.sleep(1000);
}
list.add(Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
//System.out.println("===========================thread exec finish!");
// 关闭线程池
executor.shutdown();
//executor.awaitTermination(5, TimeUnit.SECONDS)会使得线程阻塞设置的时间,再判断线程是否全部执行完成
while (!executor.awaitTermination(5, TimeUnit.SECONDS)){
System.out.println("============继续等待5秒");
}
System.out.println("===========================thread exec finish!");
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
//可以收集执行过程产生的数据
System.out.println(list.toString());
System.out.println("++++++++++++++++++++++++thread exec finish!");
}
}
}