因为使用JDK 自带的工具类所创建的线程池存在一定的弊端,容易导致 OOM。例如
ExecutorService executorService =Executors.newFixedThreadPool(10);
所以用阿里的代码规约来创建,首先引入google的开源工具库 Guava
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
然后创建线程
//创建一个线程池
// 线程数
final int THREAD_POOL_SIZE = 8;
// 使用 ThreadFactoryBuilder 创建自定义线程名称的 ThreadFactory
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("hyn-demo-pool-%d").build();
// 创建线程池,其中任务队列需要结合实际情况设置合理的容量
ThreadPoolExecutor executor = new ThreadPoolExecutor(THREAD_POOL_SIZE,
THREAD_POOL_SIZE,
0L,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(1024),
namedThreadFactory,
new ThreadPoolExecutor.AbortPolicy());
//创建500个线程,访问数据库
for(int j=0;j<500;j++){
executor.submit(new Runnable() {
@Override
public void run() {
方法
}
});
}
// 新建 1000 个任务,每个任务是打印当前线程名称
for (int i = 0; i < 500; i++) {
executor.execute(() -> System.out.println(Thread.currentThread().getName()));
}
// 优雅关闭线程池
executor.shutdown();
executor.awaitTermination(1000L,TimeUnit.SECONDS);
// 任务执行完毕后打印"Done"
System.out.println("Done");
参考大佬的文章,很详细