现在服务器端的应用程序几乎都采用了“线程池”技术,这主要是为了提高系统效率。因为如果服务器对应每一个请求就创建一个线程的话,在很短的一段时间内就会产生很多创建和销毁线程动作,导致服务器在创建和销毁线程上花费的时间和消耗的系统资源要比花在处理实际的用户请求的时间和资源更多。线程池就是为了尽量减少这种情况的发生。下面我们来看看怎么用Java实现一个线程池。一个比较简单的线程池至少应包含线程池管理器、工作线程、任务队列、任务接口等部分。其中线程池管理器(ThreadPool Manager)的作用是创建、销毁并管理线程池,将工作线程放入线程池中;工作线程是一个可以循环执行任务的线程,在没有任务时进行等待;任务队列的作用是提供一种缓冲机制,将没有处理的任务放在任务队列中;任务接口是每个任务必须实现的接口,主要用来规定任务的入口、任务执行完后的收尾工作、任务的执行状态等,工作线程通过该接口调度任务的执行。

1.为什么要使用线程池在java中,如果每个请求到达就创建一个新线程,开销是相当大的。在实际使用中,服务器在创建和销毁线程上花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源。如果在一个jvm里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系统资源不足。为了防止资源不足,服务器应用程序需要采取一些办法来限制任何给定时刻处理的请求数目,尽可能减少创建和销毁线程的次数,特别是一些资源耗费比较大的线程的创建和销毁,尽量利用已有对象来进行服务,这就是“池化资源”技术产生的原因。线程池主要用来解决线程生命周期开销问题和资源不足问题。通过对多个任务重复使用线程,线程创建的开销就被分摊到了多个任务上了,而且由于在请求到达时线程已经存在,所以消除了线程创建所带来的延迟。这样,就可以立即为请求服务,使用应用程序响应更快。另外,通过适当的调整线程中的线程数目可以防止出现资源不足的情况。2.线程池的组成部分一个比较简单的线程池至少应包含线程池管理器、工作线程、任务列队、任务接口等部分。其中线程池管理器的作用是创建、销毁并管理线程池,将工作线程放入线程池中;工作线程是一个可以循环执行任务的线程,在没有任务是进行等待;任务列队的作用是提供一种缓冲机制,将没有处理的任务放在任务列队中;任务接口是每个任务必须实现的接口,主要用来规定任务的入口、任务执行完后的收尾工作、任务的执行状态等,工作线程通过该接口调度任务的执行。线程池管理器至少有下列功能:创建线程池,销毁线程池,添加新任务。工作线程是一个可以循环执行任务的线程,在没有任务时将等待。任务接口是为所有任务提供统一的接口,以便工作线程处理。任务接口主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等。3.线程池适合应用的场合当一个服务器接受到大量短小线程的请求时,使用线程池技术是非常合适的,它可以大大减少线程的创建和销毁次数,提高服务器的工作效率。但是线程要求的运动时间比较长,即线程的运行时间比� ......

java 线程作用_Java 线程池的作用相关推荐

  1. java数据库连接的作用_java数据库连接池的作用

    1.什么是连接池 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个: 释放空闲时间超过最大空闲时间的数据库连接,来避免因为没有释放数据库连接 ...

  2. java线程池有什么作用_java线程池的作用是什么?线程池介绍

    你知道java中线程池的作用是什么吗?那么究竟什么是线程池呢?都有哪些类型呢?让我们对以上的问题来进行详细的了解吧. 一.java线程池作用 第一个我们先来对它的作用进行一下简单的介绍,使用线程池的优 ...

  3. java 线程组作用_Java线程组(ThreadGroup)使用

    JDK 对线程组类注释: A thread group represents a set of threads. In addition, a thread group can also includ ...

  4. java多线程抽奖_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码...

    导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...

  5. 线程池 java 新建方式_Java线程池的四种创建方式

    Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程. newFi ...

  6. idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(一)

    课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...

  7. idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(二)

    课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...

  8. java 线程回收_JAVA线程池资源回收的问题

    最近项目中为了提高用户体验度,前台创建任务后台任务,用多线程来跑. 现在的场景:后台定时任务管理这两个线程池,一个最大线程数10个,一个最大线程数15.应用部署之后,不超过5个小时,服务器负载高,内存 ...

  9. java中我爱你_Java线程学习(转)

    编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join() 还有一个重要的关键字:s ...

最新文章

  1. 分布式文件系统Hadoop
  2. gartner android 市场份额,Gartner:Android去年市场份额超iOS和RIM
  3. 计算机类期刊的影响因子
  4. 科大星云诗社动态20201205
  5. 提升效率的Vue组件开发和实战技巧
  6. (转) Linux 内核运行参数修改——sysctl命令
  7. e-r模型教案高中计算机,《ER模型1》[数据库][计算机]教案.doc
  8. imx6. android6.0经常修改或者用到的目录(未完)
  9. 效率低的日子怎么办?
  10. Python学习记录——函数
  11. CentOS6.5和RedHat6.5下以rpm方式安装mysql-5.6.20
  12. 数据库、SQL脚本、存储过程执行准则(*****)
  13. [libgdx游戏开发教程]使用Libgdx进行游戏开发(11)-高级编程技巧 Box2d和Shader
  14. 正反物质相撞湮灭,是因为电荷因素吗?
  15. java 性能优化分析工具_【java】JVM性能调优监控工具、可视化在线内存分析工具...
  16. file上传代码 ios_自己动手写一个 iOS 网络请求库(四)——快速文件上传
  17. Pearson相关系数, Spearman相关系数,Kendall相关系数的区别
  18. 盘丝洞服务器维护,2010年8月3日定期维护公告 群雄逐鹿争霸赛
  19. PrecompiledAssemblyException: Multiple precompiled assemblies with the same name websocket-sharp.dll
  20. 2021-09-28

热门文章

  1. 2019适合创业的项目有哪些呢
  2. 全球主题公园集团十强公布;华晨宇自创潮流品牌引入区块链加密技术 | 美通企业日报...
  3. 谷歌学术搜索文章GB/T 7714索引,后面的数字是代表什么?
  4. 2022-11-10 工作记录--HTML-video视频铺满播放
  5. Mac查看JDK路径
  6. 兔子NB播放器 (不用配置网上邻居,手机播放电脑视频)
  7. 相机标定--内参之绝对圆锥曲线
  8. win10下查看系统自带壁纸的路径
  9. 关于python多态介绍
  10. chi2inv函数 matlab_[转载]常见的概率分布(matlab作图)