Java同步—线程池的创建和使用
线程池
构建一个新的线程是有一定代价的,因为涉及到与操作系统的交互。如果程序中需要使用大量生命周期很短的线程,就应该使用线程池。
将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/9445908.html
转载于:https://www.cnblogs.com/Fill/p/9446381.html
Java同步—线程池的创建和使用相关推荐
- 谈谈java的线程池(创建、机制)
目录 Executors创建线程池默认方法 自定义线程池 Executors创建线程池默认方法 newFixedThreadPool()方法,该方法返回一个固定数量的线程池,该方法的线程数始终不变,当 ...
- java(线程池的创建方式,和线程池的原理)
1.为什么要使用线程池: 减少资源消耗,通过重复的使用已创建好的线程,避免了线程的频繁创建和销毁所造成的消耗 提高响应速度,当任务到达的时候,不需要再去创建,可以直接使用已经创建好的线程就能立即执 ...
- Java队列——线程池创建的例子
线程池为线程生命周期开销问题和资源不足问题提供了解决方案.通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上.其好处是,因为在请求到达时线程已经存在,所以无意中也消除了线程创建所带来的延迟.这 ...
- JAVA线程池ThreadPoolExecutor创建以及各参数的详细说明
最近把线程很多的东西都温故了一遍,发现还漏了个线程池,今天看了些线程池的文章,然后加入了自己的理解,总结如下 首先看下一个线程池的最简单的构造方法如下 * @param corePoolSize th ...
- 并发编程五:java并发线程池底层原理详解和源码分析
文章目录 java并发线程池底层原理详解和源码分析 线程和线程池性能对比 Executors创建的三种线程池分析 自定义线程池分析 线程池源码分析 继承关系 ThreadPoolExecutor源码分 ...
- 一文弄懂Java中线程池原理
在工作中,我们经常使用线程池,但是你真的了解线程池的原理吗?同时,线程池工作原理和底层实现原理也是面试经常问的考题,所以,今天我们一起聊聊线程池的原理吧. 为什么要用线程池 使用线程池主要有以下三个原 ...
- Linux下通用线程池的创建与使用
Linux下通用线程池的创建与使用 本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关.另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整 ...
- Java多线程- 线程池的基本使用和执行流程分析 - ThreadPoolExecutor
线程池的实现原理 池化技术 一说到线程池自然就会想到池化技术. 其实所谓池化技术,就是把一些能够复用的东西放到池中,避免重复创建.销毁的开销,从而极大提高性能. 常见池化技术的例如: 线程池 内存池 ...
- Java并发—线程池ThreadPoolExecutor基本总结
原文作者:Matrix海子 原文地址:Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线 ...
最新文章
- 区块链技术背后的运行逻辑
- 数学推导+纯Python实现机器学习算法26:PCA降维
- R语言使用pROC包绘制ROC曲线、获取最优阈值(threshold)及最优阈值对应的置信区间
- GDCM:gdcm::Scanner的测试程序
- Typescript 和 Javascript之间的区别
- [集训队作业2018] 复读机(生成函数,单位根反演)
- define 汉字 error C2001: newline in constant
- Android开发中解决自定义弹窗获取不到控件对象的问题
- poj1328 区间贪心 挑战程序设计竞赛
- C#读取xml文件静态类
- ios 发送请求时按home_iPhone 是否能够升级至指定的 iOS 系统版本?
- Android MVP和Dagger2
- 在Docker上运行Asp.Net Core示例网站
- 【论文笔记】Deep Learning Face Representation from Predicting 10,000 Classes
- CCS5.5.0编译问题之” XDAIS_CG_ROOT ”
- 【读书笔记】暗时间~
- ActivityMQ入门案例
- 推荐一款可以免费使用的电脑屏幕监控软件
- 一阶导数和二阶导数的一些性质
- 计算机wap怎么制作表格,如何在电脑上制作简单的表格?
热门文章
- VirtualBox启动报错
- 我的第一本算法书(图解算法)——什么是哈希表
- Python使用for循环打印直角三角形、九九乘法表、金字塔
- win10删除开机密码_讲解win10忘记开机密码
- linux QT 结束当前进程_嵌入式linux编程开发必备知识
- 测试面试题集-3.生活物品测试:行李箱、电梯、洗衣机
- has install-snap change in progress问题
- 05NumPy--5.3数组运算
- Kava将于下午2时重新启动Kava Chain
- SAP License:SAP不便解决的问题之六——采购组在审批策略中的作用