什么是线程池,如何使用,为什么要用

1、什么是线程池:  java.util.concurrent.Executors提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池

多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。

假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。

   如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。

一个线程池包括以下四个基本组成部分:

 1、线程池管理器(ThreadPool):用于创建并管理线程池,包括 创建线程池,销毁线程池,添加新任务;2、工作线程(PoolWorker):线程池中线程,在没有任务时处于等待状态,可以循环的执行任务 3、任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行,它主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等4、任务队列(taskQueue):用于存放没有处理的任务。提供一种缓冲机制。

线程池不仅调整T1,T3产生的时间段,而且它还显著减少了创建线程的数目,看一个例子:

    假设一个服务器一天要处理50000个请求,并且每个请求需要一个单独的线程完成。在线程池中,线程数一般是固定的,所以产生线程总数不会超过线程池中线程的数目,而如果服务器不利用线程池来处理这些请求则线程总数为50000。一般线程池大小是远小于50000。所以利用线程池的服务器程序不会为了创建50000而在处理请求时浪费时间,从而提高效率。

2.常见线程池

①newSingleThreadExecutor

单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行执行任务

②newFixedThreadExecutor(n)

固定数量的线程池,没提交一个任务就是一个线程,直到达到线程池的最大数量,然后后面进入等待队列直到前面的任务完成才继续执行

③newCacheThreadExecutor(推荐使用)

可缓存线程池,当线程池大小超过了处理任务所需的线程,那么就会回收部分空闲(一般是60秒无执行)的线程,当有任务来时,又智能的添加新线程来执行。

④newScheduleThreadExecutor

大小无限制的线程池,支持定时和周期性的执行线程


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简述 在面向软件编程中,创建和销毁对象是一件非常耗时的事情,因为创建一个对象要获取内存资源或者其它更多的资源。在J...
    安静点就睡吧阅读 1,690评论 0 4
  • 淅淅沥沥雨声敲打的玻璃,敲醒新的一天。下雨了?怎么办?还去不去三叠泉?下雨能不能去?这可如何是好。“不到三叠泉,不...
    布偶有点胖阅读 704评论 18 5
  • 寂静的夜空悉数着星星的落寞 皎洁的明月与我交换眼神 那些从我眼角滑落的泪啊 你在哪里 风儿在我耳边呢喃着 亲吻着我...
    灯火阑珊心里话阅读 302评论 0 5
  • 【连载】狗狗的一生(上)3 五 小黑屋 最近,也不知道是怎么了,牙龈痒得我是忍无可忍,就像一个毒瘾患者忘记吸食白粉...
    北斗星君阅读 508评论 4 11
  • 2017年 又是一个夏天 回首这几年的生活 眼前仿佛会闪出一些画面 又觉得并不那么真实 一切都像在做梦 从开始到疯...
    恭王府的小斯阅读 261评论 0 0