线程池
- 线程的状态:1新建状态(没启动) 2 可运行状态(可能在运行,也可能等待cpu时间片) 3 阻塞(等待获取排他锁,或者等待其他线程唤醒,不醒无法获取时间片)4 限期等待(一段时间后被系统自动唤醒) 5 死亡:可能任务执行结束或产生异常结束。
- 线程池的状态:
RUNNING:运行状态,可以接受新任务。
SHUTDOWN不接受新任务,但是能处理已添加的任务。
STOP:不接受新任务,不处理已添加的任务。
TIDYING:所有的任务已终止;当线程池STOP状态,线程池执行的任务为空时,就会由STOP变成TIDYING。
TERMINATED:线程池彻底终止。
- 线程池的工作原理:首先创建线程池,通过execute()方法添加任务,判断正在运行的线程数量小于核心线程数量,马上创建线程去执行;如果正在运行得线程数量等于或者大于核心线程数量,就将这个任务加入队列;如果队列满了,正在运行得线程数量小于最大线程数,那么会创建非核心线程去执行这个任务;如果队列满了,正在运行得线程数量等于或大于最大线程数量,那么线程池就会报异常。也可以设置拒绝策略。
- 线程池参数:1核心线程数 2 最大线程数 3非核心线程存活的时间 4 存活时间得单位 5 缓冲队列 6 线程工厂 7拒绝策略。
- 拒绝策略:1丢弃任务抛出异常。2 线程池没有关闭,让提交任务的当前线程处理。3 直接自己丢弃这个任务,不触发任何动作 4:丢弃队列最前的任务,重新提交被拒绝的任务。
- 线程池的队列:1 ArrayBlockingQueue:数组阻塞队列。2 LinkBlockingQueue:链表阻塞队列。3 DelayQueue:延时队列。
- 线程池的类型:1 可缓存的线程池,灵活回收空闲线程。2 定时线程池,控制线程最大并发数。3延时线程池:支持可定期或延时执行任务。 4单线程化线程池:它会用唯一的工作线程来执行任务。
- 创建线程池的几种方式:通过Excutors创建:1.一个固定大小的线程池,可以控制并发线程。2创建一个可缓存的线程池,如果线程超过需要的线程缓存一段时间后会进行线程的回收。3创建单个线程数的线程池,可以保证先进先出的执行顺序。4创建一个可以执行延迟任务的线程池。5创建一个单线程的可以执行延迟任务的线程池。6创建一个抢占式执行的线程池(任务执行顺序不确定)。
9.通过ThreadPoolExecutor创建:使用7个参数创建线程池。
单线程池的意义:虽然是单线程池,提供了工作队列,生命管理周期,工作线程维护等功能。
标签:JAVA,队列,创建,----,单线程,任务,线程,执行 From: https://www.cnblogs.com/ybex/p/17557446.html