黑马程序员----线程池的通俗理解!面试时候高频率问题
2014-08-16 20:44
309 查看
文章来源:黑马程序员,黑马论坛。
线程池可以看做容纳线程的容器
1.为什么要使用线程池
在java中,如果每个请求到达就创建一个新线程,开销是相当大的。在实际使用中,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源。如果在一个jvm里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系统资源不足。为了防止资源不足,需要采取一些办法来限制任何给定时刻处理的请求数目,尽可能减少创建和销毁线程的次数,特别是一些资源耗费比较大的线程的创建和销毁,尽量利用已有对象来进行服务。
线程池主要用来解决线程生命周期开销问题和资源不足问题。通过对多个任务重复使用线程,线程创建的开销就被分摊到了多个任务上了,而且由于在请求到达时线程已经存在,所以消除了线程创建所带来的延迟。这样,就可以立即为请求服务,使用应用程序响应更快。另外,通过适当的调整线程中的线程数目可以防止出现资源不足的情况。
2.线程池的组成部分
一个比较简单的线程池至少应包含线程池管理器、工作线程、任务列队、任务接口等部分。其中线程池管理器的作用是创建、销毁并管理线程池,将工作线程放入线程池中;工作线程是一个可以循环执行任务的线程,在没有任务是进行等待;任务列队的作用是提供一种缓冲机制,将没有处理的任务放在任务列队中;任务接口是每个任务必须实现的接口,主要用来规定任务的入口、任务执行完后的收尾工作、任务的执行状态等,工作线程通过该接口调度任务的执行。
线程池管理器至少有下列功能:创建线程池,销毁线程池,添加新任务。
工作线程是一个可以循环执行任务的线程,在没有任务时将等待。
任务接口是为所有任务提供统一的接口,以便工作线程处理。任务接口主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等。
下面举个例子来详细说说
现在我们想线程池中添加100个任务,看线程池中线程数量是如何变化的,加深我们的理解。默认线程池中线程下限是5,上限25.
线程池可以看做容纳线程的容器
1.为什么要使用线程池
在java中,如果每个请求到达就创建一个新线程,开销是相当大的。在实际使用中,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源。如果在一个jvm里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系统资源不足。为了防止资源不足,需要采取一些办法来限制任何给定时刻处理的请求数目,尽可能减少创建和销毁线程的次数,特别是一些资源耗费比较大的线程的创建和销毁,尽量利用已有对象来进行服务。
线程池主要用来解决线程生命周期开销问题和资源不足问题。通过对多个任务重复使用线程,线程创建的开销就被分摊到了多个任务上了,而且由于在请求到达时线程已经存在,所以消除了线程创建所带来的延迟。这样,就可以立即为请求服务,使用应用程序响应更快。另外,通过适当的调整线程中的线程数目可以防止出现资源不足的情况。
2.线程池的组成部分
一个比较简单的线程池至少应包含线程池管理器、工作线程、任务列队、任务接口等部分。其中线程池管理器的作用是创建、销毁并管理线程池,将工作线程放入线程池中;工作线程是一个可以循环执行任务的线程,在没有任务是进行等待;任务列队的作用是提供一种缓冲机制,将没有处理的任务放在任务列队中;任务接口是每个任务必须实现的接口,主要用来规定任务的入口、任务执行完后的收尾工作、任务的执行状态等,工作线程通过该接口调度任务的执行。
线程池管理器至少有下列功能:创建线程池,销毁线程池,添加新任务。
工作线程是一个可以循环执行任务的线程,在没有任务时将等待。
任务接口是为所有任务提供统一的接口,以便工作线程处理。任务接口主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等。
下面举个例子来详细说说
现在我们想线程池中添加100个任务,看线程池中线程数量是如何变化的,加深我们的理解。默认线程池中线程下限是5,上限25.
相关文章推荐
- 面试时候经常会问的一些问题
- 面试的时候遇到的问题:二叉树
- 黑马程序员-多线程(线程的安全问题与锁的理解)
- 身为一名Java程序员,在面试的时候常常被问到的,下面我总结一些常常别问到的问题。
- 黑马程序员【深入理解IO流中字符编码问题】
- 面试时候经常会问的一些问题(不断补充中) - BeanSoft
- 黑马程序员——上级向资深工程师提出的十个iOS面试问题——黑马 ios 技术博客
- 面试的时候问的关于personal的问题
- 面试的时候喜欢问的跟公司有关的问题
- LeetCode 问题难度,面试出现频率及问题相关数据结构和算法
- 面试时候最难回答的25个问题
- 黑马程序员_面试问题
- 黑马程序员—我在学习飞行棋的时候发现的一些问题
- 面试的时候经常遇到数据类型字节大小,字节对齐的问题,现整理如下
- 黑马程序员——java编程那些事儿____java中必须理解的一些问题
- 面试中出现频率较高的英语问题及精彩回答
- 我在笔试面试的时候被问到的问题
- 当你输入一个网址的时候,实际会发生什么?(赛门铁克电话面试我,曾经问过这个问题,最后一问,我只能说不知道)
- NP问题通俗理解
- 动态规划之01背包问题 通俗理解动态规划的过程