线程池任务添加流程

7人阅读 评论(0) 收藏 举报
分类:

一个任务进来,如果核心线程未满,则创建核心线程来执行,如果核心线程已满则放到阻塞队列中,如果阻塞队列已满未达到最大线程数,则创建非核心线程来处理任务,如果达到最大线程数则拒绝任务。

ExecutorService 提供了两种提交任务的方法:

  1. execute():提交不需要返回值的任务
  2. submit():提交需要返回值的任务

有两个方法关闭线程池:

  1. `shutdown() 
    • 将线程池的状态设置为 SHUTDOWN,然后中断所有没有正在执行的线程
  2. shutdownNow() 
    • 将线程池设置为 STOP,然后尝试停止所有线程,并返回等待执行任务的列表

它们的共同点是:都是通过遍历线程池中的工作线程,逐个调用 Thread.interrup() 来中断线程,所以一些无法响应中断的任务可能永远无法停止(比如 Runnable)。

java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类

四种构造线程池的区别就在于拒绝任务策略:

  1. ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。   
  2. ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。   
  3. ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)  
  4. ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务  

查看评论

线程池&任务

1.线程池 1.无限制创建线程的缺点 #1:线程生命周期的开销。线程的创建与关闭不是“免费”的。实际的开销依据不同的平台不一样,而且创建线程是需要时间的,会带来请求的延迟。如果没处理一个请求创建一个...
  • zhu408891980
  • zhu408891980
  • 2016-06-02 14:28:36
  • 1262

线程池动态并安全地中断所有线程不需要使用shutdownnow()同时可以继续添加任务

对于一个线程池如果使用shutdownNow() or shutdown() 方法关闭线程池的话可能会造成不必要的开销,因为有时候我们需要关闭线程池的线程但是之后可能还会继续使用线程池, 因此,最好...
  • a1053904672
  • a1053904672
  • 2017-05-15 16:25:25
  • 653

Java多线程总结(6)— 线程池的基本使用和执行流程分析

1 线程池的实现原理及基本类结构  合理利用线程池能够带来三个好处。 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立...
  • Mark_LQ
  • Mark_LQ
  • 2015-12-18 21:36:17
  • 6458

任务,线程和同步(四)之ThreadPool(线程池)

线程池任务后台基础:线程池。创建线程需要时间。如果有不同的短任务要完成,就可以事先创建许多线程,在应完成这些任务时发出请求,这个线程最好在需要更多的线程时增加,在需要释放资源时减少。 不需要自己创建...
  • younghaiqing
  • younghaiqing
  • 2017-02-24 16:16:18
  • 839

教你彻底弄明白Executor框架线程池任务执行的全过程

一、前言 1.5后引入的Executor框架的最大优点是把任务的提交和执行解耦。要执行任务的人只需把Task描述清楚,然后提交即可。这个Task是怎么被执行的,被谁执行的,什么时候执行的,提交的人就...
  • fngy123
  • fngy123
  • 2015-09-25 21:41:49
  • 12041

Java线程池并发执行多个任务

Java在语言层面提供了多线程的支持,线程池能够避免频繁的线程创建和销毁的开销,因此很多时候在项目当中我们是使用的线程池去完成多线程的任务。 Java提供了Executors 框架提供了一些基础的组...
  • micro_hz
  • micro_hz
  • 2017-06-28 23:14:11
  • 1330

java线程池之ThreadPoolExecutor(三):提交任务并得到任务执行结果

1.Callable接口 ThreadPoolExecutor不仅可以执行Runnable的实现类,还可以执行Callable接口的实现类。Callable的接口和Runnable接口的区别是:Ca...
  • wx5040257
  • wx5040257
  • 2017-09-19 00:01:41
  • 957

大文件 and 多下载任务的封装(一)---线程池的封装(ThreadPool,TheadManager)

ThreadManager原文地址 前段时间对三级缓存机制做了系统的分析,但是对于网络下载的问题还有很多,比如今天遇到的问题,针对一些需要下载大文件,并且需要进行多线程下载的应用来说,(比如,像一...
  • MyLoveyaqiong
  • MyLoveyaqiong
  • 2016-11-12 19:33:58
  • 1175

戏(细)说Executor框架线程池任务执行全过程(下)

上一篇文章中通过引入的一个例子介绍了在Executor框架下,提交一个任务的过程,这个过程就像我们老大的老大要找个老大来执行一个任务那样简单。并通过剖析ExecutorService的一种经典实现Th...
  • zhushuai1221
  • zhushuai1221
  • 2016-08-04 14:59:47
  • 570

可执行任务取消处理线程池

周末闲来无事,把思考了很久的一个线程池处理算法,实现了,总结了一下设计的思路和设计的初衷。 在进行多线程异步任务调用时,我们经常会用到.net中的线程池System.Threading.Thread...
  • gongbenwen
  • gongbenwen
  • 2016-10-23 13:36:03
  • 1517
    个人资料
    持之以恒
    等级:
    访问量: 518
    积分: 299
    排名: 26万+
    博客专栏
    文章存档