Java线程池总结
来源:互联网 发布:mac电脑excel换行 编辑:程序博客网 时间:2024/05/17 22:52
Java线程池总结
Java多线程知识中,线程池算是一个比较高级的知识了。但是很多面试或应用中都会有涉及到。
本文将对java线程池的知识做一下简单介绍,并用实际例子做阐述。
一.线程池的作用:
线程池可以很好地提高性能,尤其是当程序中需要创建大量生存周期很短的线程时,更应该考虑使用线程池。
使用线程池可以有效地控制系统中并发线程的数量,当系统中包含大量并发线程时,会导致系统性能剧烈下降,
甚至导致JVM崩溃,而线程池的最大线程数参数可以控制系统中并发线程数不超过此数。
二.线程池的创建
(一)静态方法
从JAVA5开始新增了一个Executors工具类来产生线程池,它有如下几个静态工厂方法来创建线程池。
强烈建议使用较为方便的 Executors 工厂方法
1.Executors.newCachedThreadPool() 创建一个具有缓冲功能的线程池(线程池为无限大),
但是在以前构造的线程可用时将重用它们。
2.Executors.newFixedThreadPool(int) 创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程
3.Executors.newSingleThreadExecutor() 创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程
4.Executors.newScheduledThreadPool(int corePoolSize) 创建一个线程池,
它可安排在给定延迟后运行命令或者定期地执行
5.Executors.newSingleThreadScheduledExecutor(int corePoolSize) 创建一个只有一条线程的线程池池,
它可安排在给定延迟后运行命令或者定期地执行
上面方法中前三个方法返回的是:ExecutorService对象,
后面两个返回的是ScheduledExecutorService对象是ExecutorService的子类。
ExecutorService代表尽快执行线程的线程池(只要线程池中有空闲的线程,就立即执行线程任务),
程序只要将一个Runnable对象或Callable对象(代表线程任务)提交给该线程,该线程就会尽快执行该任务
ExecutorService的方法:
shutdown() 启动一次顺序关闭线程池,执行以前提交的任务,但不接受新任务。
shutdownNow() 试图停止所有正在执行的活动任务,暂停处理正在等待的任务,并返回等待执行的任务列表
(二)使用线程池来执行线程任务的步骤
1.调用Executor类的静态方法来创建一个ExecutorService对象,该对象代表一个线程池。
2.调用Runnable实现类的示例,作为线程执行任务。
3.调用ExecutorService对象的submit方法来提交Runnable示例。
4.当不想提交任务时,调用ExecutorService对象的shutdown方法来关闭线程。
(三)线程池的一个简单例子
运行结果
这和我们普通线程的使用其实差不多,但是相关类和方法有很大的区别。
其中记住上面的四个步骤是很重要的。
四.下面说一下线程池的相关概述:
(一)什么原因使我们不得不使用线程池?
主要原因是:短时间内需要处理的任务数量很多
(二)使用线程池的好处:
1.减少在创建和销毁线程上所花的时间以及系统资源的开销
2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存
(三)FixedThreadPool是一个典型且优秀的线程池,
它具有线程池提高程序效率和节省创建线程时所耗的开销的优点。
但在线程池空闲时,即线程池中没有可运行任务时,它不会释放工作线程,还会占用一定的系统资源。
(四)CachedThreadPool的特点就是在线程池空闲时,即线程池中没有可运行任务时,
它会释放工作线程,从而释放工作线程所占用的资源。但是,但当出现新任务时,
又要创建一新的工作线程,又要一定的系统开销。并且,在使用CachedThreadPool时,
一定要注意控制任务的数量,否则,由于大量线程同时运行,很有会造成系统瘫痪。
五.线程池的一个实际应用例题
题目要求:1 创建线程数量为5的线程池。 2 同时运行5个卖票窗口。 3 总票数为100,每隔一秒钟卖一张票
参考答案如下:
本文对java线程池作了简要的描述和使用。其中线程池还有很多相关类和方法没有说到,
想了解的可以自己多去研究。
- Java线程池总结
- Java线程池总结
- Java线程池总结
- Java线程池总结
- Java线程池总结
- Java线程池总结
- Java线程池总结
- Java线程池总结
- Java线程池总结
- Java线程池总结
- JAVA线程池总结
- java中的进程,线程,线程池总结
- java中的进程,线程,线程池总结
- Java线程池总结笔记
- JAVA线程池机制总结
- Java线程池用法总结
- java并发-线程池总结
- java线程池的总结
- ANR
- POJ 2406 Power Strings(next数组应用)
- 2016.10.05【初中部 NOIP普及组 】模拟赛
- 同一个世界【c语言闯关】
- 堆排序小根堆 大根堆 迭代 递归 总结 完整代码
- Java线程池总结
- css里同一个标签定义了两种样式,哪一个有效?
- 2016.10.5总结
- 2016.10.05【初中部 NOIP普及组 】模拟赛题解
- 等待队列与设备阻塞方式
- Android 如何实现RecyclerView横向滑动
- 求职之Linux基础
- 为何说“工业机器人”棒棒哒?
- ART和Dalvik区别