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