一、首先,什么是线程池?
一个线程池管理了一组工作线程,同时它还包括了一个用于放置等待执行任务的队列。
二、如何创建线程池?
线程池可以通过Executors工厂方法来创建,JDK中实现ExecutorService的类有:
- ForkJoinPool
- ThreadPoolExecutor
- ScheduledThreadPoolExecutor
Executor类有以下几种方法来创建ExecutorService:
1. 使用newCachedThreadPool()
创建一个ExecutorService
, ExecutorService
根据需要来创建线程,或者重复使用已有的线程来执行任务
2. 使用newFixedThreadPool(int numberOfThreads )
创建一个可重复使用的、固定线程数量的ExecutorService
3. 使用newScheduledThreadPool(int corePoolSize)
根据给定时间,延迟时间计划创建ExecutorService
4. newSingleThreadExecutor()
创建单个工作线程
5. newSingleScheduledThreadExector()
根据时间计划延迟创建单个工作线程
6. newWorkStealingPool()
创建一个拥有多个任务队列(以便减少连接数)的ExecutorService
最后,调用Shutdown
方法,ExecutorService进入关闭模式
这些类都实现了线程池的抽象
三、线程池包括以下几个部分:
1. 线程池管理器(ThreadPool):用于创建并管理线程池,包括创建线程池、销毁线程池、添加新任务;
2. 工作线程(PoolWorker): 线程池中的线程,在没有任务时处于等待状态,可以循环执行任务;
3. 任务接口(Task): 每个任务必须实现接口,以供工作线程调度任务的执行,它主要规定了任务的入口,任务执行完成后的收尾工作,任务执行状态等;
4. 任务队列(taskQueue): 用于存放没有处理的任务,提供一种缓存机制。
初识java线程池
最新推荐文章于 2024-08-24 22:01:16 发布