线程池,顾名思义就是存放线程的池子。java中Executors类提供了自动创建线程池的方法,有带参数和不带参数的,分别是newFixedThreadPool(int nThreads)和newCachedThreadPool()
newCachedThreadPool():创建一个指定最多线程数量的线程池
// 1.创建线程池对象
ExecutorService pool = Executors.newCachedThreadPool();
// 2.创建任务代码
Runnable runnable = () -> {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":正在执行任务");
};
// 3.提交任务给线程池
for (int i = 0; i < 100; i++) {
pool.submit(runnable);
}
// 4.销毁线程池(一般不销毁)
pool.shutdown();
newFixedThreadPool(int nThreads):创建一个默认的线程池,容量为int最大值
// 1.创建线程池对象,设定线程数为10
ExecutorService pool = Executors.newFixedThreadPool(10);
// 2.创建任务代码
Runnable runnable = () -> {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":正在执行任务");
};
// 3.提交任务给线程池
for (int i = 0; i < 100; i++) {
pool.submit(runnable);
}
// 4.销毁线程池(一般不销毁)
pool.shutdown();
总结:
自动创建线程池都是这一个方法,区别在于是否指定线程数量。另外,这两种自动创建线程池的方式都不推荐,因为这两种方式都比较粗略。