线程池:常用的参数,工作流程
线程池的优点:
- 降低资源消耗:通过重复利用已创建的线程来降低线程创建和销毁时的消耗。
- 提高响应速度:当任务到达时,任务可以不用等待线程创建就能立即执行。
- 提高线程的可管理性。使用线程池可以统一分配、调控和监控。
线程的五种状态
- 创建。当new了一个线程,但还没有start时,线程处于创建状态。
- 就绪。当调用了start之后,但线程调度程序还没有设置执行当前线程时,线程处于就绪状态。
- 运行。当线程调度程序执行到当前线程时,当前线程从就绪态转为运行态,开始执行run方法里的代码。
- 阻塞。线程在运行时被暂停执行(通常在等待某项资源就绪后再执行,wait或sleep会导致线程阻塞),这时线程处于阻塞态。
- 死亡。线程在运行完run方法里的代码或是调用stop方法后,线程结束运行。
常用的参数
- int corePoolSize 核心线程数
- int maximumPoolSize 最大线程数
- long keepAliveTime 达到最大线程数后,线程池工作线程空闲后,保持存活的时间
- TimeUnit unit 是keepAliveTime的单位
- BlockingQueue workQueue 阻塞队列
- RejectedExecutionHandler handler 饱和策略
Java实现多线程的方式
- 继承Thread类,重写run方法
- 实现Runable接口,实现run方法
工作流程
1.当提交了一个任务时,先判断corePoolSize以及当前是否有空闲线程。如果没有空闲线程,则创建新的工作线程,直到线程池的线程数等于corePoolSize。
2.当线程数等于corePoolSize且没有空闲线程时,新进来的任务进入阻塞队列。
3.当阻塞队列满时,那就创建新的工作线程执行任务,直到线程池中的线程数达到maximumPoolSize,这时再有任务来,就由饱和策略来处理新的任务。