线程池原理概述
在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些"池化资源"技术产生的原因。比如大家所熟悉的数据库连接池正是遵循这一思想而产生的,本文将介绍的线程池技术同样符合这一思想。
假设在一台服务器完成一项任务的时间为T
T1 创建线程的时间
T2 在线程中执行任务的时间,包括线程间同步所需时间
T3 线程销毁的时间
显然T = T1+T2+T3。注意这是一个极度简化的假设。
我们渴望减少T1,T3所用的时间,从而减少T的时间。但一些线程的使用者并没有注意到这一点,所以在程序中频繁的创建或销毁线程,这导致T1和T3在T中占有相当比例。
线程池技术正是关注如何缩短或调整T1,T3时间的技术,从而提高服务器程序性能的。它把T1,T3分别安排在服务器程序的启动和结束的时间段或者一些空闲的时间段,这样在服务器程序处理客户请求时,不会有T1,T3的开销了。
一般一个简单线程池至少包含下列组成部分。
线程池管理器(ThreadPoolManager):用于创建并管理线程池
工作线程(WorkThread): 线程池中线程
任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。
任务队列 用于存放没有处理的任务。提供一种缓冲机制。
合理配置线程池尺寸对于大量任务处理的效率有非常明显的提高,但是一旦尺寸选择不合理(过大或过小)就会严重降低影响服务器性能。理论上"过小"将出现任务不能及时处理的情况,但在图表中显示出某些小尺寸的线程池表现很好,这是因为测试驱动中有很多线程同步开销,且这个开销相对于完成单个任务的时间是不能忽略的。"过大"则会出现线程间同步开销太大的问题,而且在线程间切换很耗CPU时间,可能出现"OutOfMemory"的错误。
分享到:
相关推荐
#### 二、线程池原理概述 线程池的核心思想在于预先创建一定数量的工作线程,并将它们保存在一个池中供后续任务调度使用。当有新的任务到来时,线程池从池中选取一个空闲线程来处理该任务,而不再创建新的线程;任务...
### 线程池 `ThreadPoolExecutor` 原理源码分析 #### 一、概述 线程池作为 Java 并发编程中的重要组件,在实际应用中被广泛使用。其核心类 `ThreadPoolExecutor` 实现了对线程的管理、调度等功能。本文将围绕 `...
### 自定义实现Java线程池 #### 一、概述 ...通过本次实践,我们不仅了解了线程池的工作原理,还学到了如何根据需求灵活定制线程池的行为,这对于提高多线程程序的效率和可维护性都是非常有帮助的。
线程池概述 线程池是一个池子,负责管理和执行任务的线程。当用户提交任务时,线程池会创建线程去执行任务,若任务超过了核心线程数时,会在一个任务队列里进行排队等待。任务通常是一些抽象的且离散的工作单元,...
### 多线程的自动管理(线程池) #### 概述 在现代软件开发中,多线程技术被广泛应用于提高程序的并发处理能力和效率。...理解和掌握线程池的基本原理及其实现机制,对于编写高质量的多线程应用程序至关重要。
本文将详细解析标题为“JAVA服务器端Socket线程池”的知识点,涵盖其基本概念、实现原理、核心类与方法的介绍,并结合示例代码深入探讨其实现细节。 #### 二、Socket编程基础 Socket编程是网络通信的基础,通过...
根据提供的文件信息,我们可以深入探讨线程池`ThreadPoolExecutor`的工作原理及其实现细节,同时也会涉及并发编程中的一些关键概念和技术。 ### 线程池`ThreadPoolExecutor`概述 `ThreadPoolExecutor`是Java中非常...
一、线程池概述 线程池是一种多线程处理形式,预先创建一组线程,当有任务需要执行时,线程池会从待命的线程中挑选一个来执行任务,而不是每次都创建新的线程。这种方式可以避免频繁创建和销毁线程带来的性能开销,...
本文档由王文举撰写,详细阐述了使用.Net Remoting实现分布式计算的原理、方法和代码实现。 【关键知识点】: 1. **.Net Remoting**:这是一种允许不同应用程序域间对象通信的技术,使得客户端可以调用远程服务器...
#### 一、Java线程池概述 线程池是Java多线程编程中的一个重要概念。它通过管理一组多线程的方式,为应用程序提供了一种更加灵活高效的线程管理机制。相比于直接创建线程,使用线程池可以有效地控制系统中的线程数量...
### 知识点总结 ...通过以上知识点的学习,不仅可以深入理解线程间通信的概念和机制,还能熟练掌握线程池的工作原理及其在 Java 中的具体应用,同时也能灵活运用 Lambda 表达式来简化代码,提高开发效率。
一、Tomcat架构概述 Tomcat基于Servlet和JavaServer Pages(JSP)标准,其架构主要由以下几个组件构成: 1. **Catalina**:这是Tomcat的核心,负责处理Servlet规范中的请求和响应。Catalina提供了Servlet容器,...
#### 概述 本文献介绍了一种名为**基于反馈的自适应线程池管理框架**(FFATpM)的新颖方法,旨在解决传统线程池调度管理中存在的问题,特别是在面对应用需求和计算资源动态变化时的不足。该框架的核心思想是在利用...
#### 概述 `java.util.concurrent.Executors` 是Java并发编程中一个非常重要的工具类,主要用于创建不同类型的线程池对象。通过使用`Executors`类,开发者可以方便地管理和控制线程池的行为,从而提高系统的性能和...
##### 1.1 概述 在Java中,为了提高程序的并发处理能力,Java标准库提供了多个线程安全的并发容器,它们主要位于`java.util.concurrent`包中。这些容器能够有效地管理共享资源的访问,并确保在多线程环境下数据的...
Java 面试题 Java 是一门广泛应用的编程语言,它的面试题涵盖了 Java 基础、Java 集合、多线程、Java 异常、Spring...* CAP 原理的概述 * CAP 原理的分类和特点 * CAP 原理的应用和优化 * CAP 原理的挑战和 limitation
网络爬虫的概述和原理 HTTP协议和URL的基本知识 Python爬虫库的介绍 数据抓取与解析 HTML解析与XPath、CSS选择器的应用 JSON和XML数据的解析 动态网页爬取技术(如使用Selenium等) 反爬机制与应对策略 反爬机制的...
标题 "springMVC+redis+线程池+ibatis的demo做pv统计" 提供了关于一个基于Java Web开发的PV(Page View)统计系统的简要概述。这个系统结合了多个核心组件,包括Spring MVC作为MVC框架,Redis作为缓存数据库,线程池...