目录
一、如何创建线程池?
(1)通过Executors工具类的静态方法,创建线程池;
(2)创建ThreadPoolExecutor对象,按照业务需要自定义线程池参数,创建线程池;
通过Executors工具类创建线程池:
public class Demo03 {
static AtomicInteger counter = new AtomicInteger();
public static void main(String[] args) {
//固定数目的线程池
ExecutorService executorService = Executors.newFixedThreadPool(12);
//动态数目的线程池
// ExecutorService executorService = Executors.newCachedThreadPool();
//单线程数目的线程池
// ExecutorService executorService = Executors.newSingleThreadExecutor();
for(int i = 1;i<=100000;i++) {
executorService.execute(()->{ //提交线程任务
System.out.printf("%s-->执行任务%d\n",Thread.currentThread().getName(),counter.incrementAndGet());
});
}
executorService.shutdown();//关闭线程池
}
}
手动创建线程池:
public class Text01 {
private static AtomicInteger counter = new AtomicInteger(0);
public static void main(String[] args) {
//手动创建线程池
ExecutorService executorService = new ThreadPoolExecutor(
5, 20, 60, TimeUnit.SECONDS,
new LinkedBlockingDeque<Runnable>(),
new MyThreadFactory("预约业务线"));
for(int i = 1;i<100;i++) {
executorService.execute(()->{ //用来提交线程任务
System.out.println(Thread.currentThread().getName()+":执行任务"+counter.incrementAndGet());
});
}
}
}
二、常见的线程池有哪几种?
1.通过Executors工具类创建的线程池对象,通常包括以下几种类型:
- Executors.newFixedThreadPool(nThreads):固定数目线程的线程池;
- Executors.newCachedThreadPool():可缓存线程的线程池;
- Executors.newSingleThreadExecutor():单线程的线程池;
- Executors.newScheduledThreadPool(corePoolsize):定时及周期执行的线程池;
2.常见的线程池实现类,通常有一下几种类型:
(1)ThreadPoolExecutor:标准线程池实现类;
(2)ScheduledThreadPoolExecutor :执行定时任务或周期性任务的线程池实现类;
(3)ForkJoinPool :用于任务分治的线程池实现类,它支持任务的分叉Fork和合并Join ,适合
处理可以分解为多个子任务并行执行的计算密集型任务;