博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java同步—线程池的创建和使用
阅读量:4698 次
发布时间:2019-06-09

本文共 1006 字,大约阅读时间需要 3 分钟。

线程池

构建一个新的线程是有一定代价的,因为涉及到与操作系统的交互。如果程序中需要使用大量生命周期很短的线程,就应该使用线程池。

Runnable对象交给线程池来执行,就会有一个线程调用run方法,当run方法退出的时候,线程不会死亡,而是在池中准备为下一个请求提供服务。

另一个使用线程池的理由是为了减少并发编程的数目,创建大量线程会大大降低性能,甚至使虚拟机崩溃,而使用线程池能限制并发编程的总数。

线程池的创建和使用

而创建线程池对象需要使用执行器(Executors),注意要加s,Executor是个接口,而Executors才能创建线程池对象。

//创建一个不限数量的线程池,当执行一个任务的时候,如果有空闲线程用,会给它分配,如果没有空闲线程,就会创建一个新线程,空闲线程会被保留60秒ExecutorService executor = Executors.newCachedThreadPool();//创建一个具有固定数量的线程池,空闲线程也会被一直保留ExecutorService executor2 = Executors.newFixedThreadPool(5);//创建一个具有一个线程的线程池,由一个线程一个接一个的执行任务(感觉有点鸡肋)ExecutorService executor3 = Executors.newSingleThreadExecutor();//创建一个预定执行而构建的固定数量的线程池ExecutorService executor4 = Executors.newScheduledThreadPool(5);//创建一个用于预定执行而构建的只有一个线程的线程池ExecutorService executor5 = Executors.newSingleThreadScheduledExecutor();

最常用的就是前三个,返回的都是ExecutorService对象,ExecutorService也是一个接口。

如果想要查看当前线程池中的线程数,不能使用ExecutorService接口对象获取,需要把它强转为它的子类,也就是ThreadPoolExecutor类对象,关于如何使用,在上一篇Callable与Future中有举例,地址:

转载于:https://www.cnblogs.com/Fill/p/9446381.html

你可能感兴趣的文章
返璞归真 asp.net mvc (4) - View/ViewEngine
查看>>
ADO.Net对Oracle数据库的操作【转载】
查看>>
Contoso 大学 - 6 – 更新关联数据
查看>>
RESTful API 设计指南
查看>>
Windows 10正式版的历史版本
查看>>
Thinking in Java Reading Note(5.初始化与清理)
查看>>
Visual Studio 2015年预览设置: 辅助安装程序说明
查看>>
洛谷2149 Elaxia的路线(dp+最短路)
查看>>
python开发学习-day03(set集合、collection系列 、深浅拷贝、函数)
查看>>
yii性能调节
查看>>
centos 7.4 + postgresql 10.1 + pg_amqp
查看>>
Throwable、Error、Exception、RuntimeException 区别
查看>>
js对闭包的理解
查看>>
腾讯面试问题
查看>>
自定义标题栏右键菜单
查看>>
Bootstrap概述
查看>>
elementUi源码解析(1)--项目结构篇
查看>>
C#中用DateTime的ParseExact方法解析日期时间(excel中使用系统默认的日期格式)
查看>>
任务二 阅读报告
查看>>
高阶函数
查看>>