首页 技术 正文
技术 2022年11月9日
0 收藏 953 点赞 3,007 浏览 901 个字

在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内

存资源或者其它更多资源。在 Java 中更是如此,虚拟机将试图跟踪每一个对象,

以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽

可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁,这就

是”池化资源”技术产生的原因。线程池顾名思义就是事先创建若干个可执行的

线程放入一个池(容器)中,需要的时候从池中获取线程不用自行创建,使用完

毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。

Java 5+中的 Executor 接口定义一个执行线程的工具。它的子类型即线程池接口

是 ExecutorService。要配置一个线程池是比较复杂的,尤其是对于线程池的原理

不是很清楚的情况下,因此在工具类 Executors 面提供了一些静态工厂方法,生

成一些常用的线程池,如下所示:

newSingleThreadExecutor:创建一个单线程的线程池。这个线程池只

有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线

程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执

行顺序按照任务的提交顺序执行。第 280 页 共 485 页

newFixedThreadPool:创建固定大小的线程池。每次提交一个任务就创

建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就

会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。

newCachedThreadPool:创建一个可缓存的线程池。如果线程池的大小

超过了处理任务所需要的线程,那么就会回收部分空闲(60 秒不执行任务)的

线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程

池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说 JVM)

能够创建的最大线程大小。

newScheduledThreadPool:创建一个大小无限的线程池。此线程池支

持定时以及周期性执行任务的需求。

newSingleThreadExecutor:创建一个单线程的线程池。此线程池支持

定时以及周期性执行任务的需求。

上一篇: 解释AOP?
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,488
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,736
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,487
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,127
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,289