线程池

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

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同步—线程池的创建和使用相关推荐

  1. 谈谈java的线程池(创建、机制)

    目录 Executors创建线程池默认方法 自定义线程池 Executors创建线程池默认方法 newFixedThreadPool()方法,该方法返回一个固定数量的线程池,该方法的线程数始终不变,当 ...

  2. java(线程池的创建方式,和线程池的原理)

    1.为什么要使用线程池:   减少资源消耗,通过重复的使用已创建好的线程,避免了线程的频繁创建和销毁所造成的消耗 提高响应速度,当任务到达的时候,不需要再去创建,可以直接使用已经创建好的线程就能立即执 ...

  3. Java队列——线程池创建的例子

    线程池为线程生命周期开销问题和资源不足问题提供了解决方案.通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上.其好处是,因为在请求到达时线程已经存在,所以无意中也消除了线程创建所带来的延迟.这 ...

  4. JAVA线程池ThreadPoolExecutor创建以及各参数的详细说明

    最近把线程很多的东西都温故了一遍,发现还漏了个线程池,今天看了些线程池的文章,然后加入了自己的理解,总结如下 首先看下一个线程池的最简单的构造方法如下 * @param corePoolSize th ...

  5. 并发编程五:java并发线程池底层原理详解和源码分析

    文章目录 java并发线程池底层原理详解和源码分析 线程和线程池性能对比 Executors创建的三种线程池分析 自定义线程池分析 线程池源码分析 继承关系 ThreadPoolExecutor源码分 ...

  6. 一文弄懂Java中线程池原理

    在工作中,我们经常使用线程池,但是你真的了解线程池的原理吗?同时,线程池工作原理和底层实现原理也是面试经常问的考题,所以,今天我们一起聊聊线程池的原理吧. 为什么要用线程池 使用线程池主要有以下三个原 ...

  7. Linux下通用线程池的创建与使用

    Linux下通用线程池的创建与使用 本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关.另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整 ...

  8. Java多线程- 线程池的基本使用和执行流程分析 - ThreadPoolExecutor

    线程池的实现原理 池化技术 一说到线程池自然就会想到池化技术. 其实所谓池化技术,就是把一些能够复用的东西放到池中,避免重复创建.销毁的开销,从而极大提高性能. 常见池化技术的例如: 线程池 内存池 ...

  9. Java并发—线程池ThreadPoolExecutor基本总结

    原文作者:Matrix海子 原文地址:Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线 ...

最新文章

  1. 区块链技术背后的运行逻辑
  2. 数学推导+纯Python实现机器学习算法26:PCA降维
  3. R语言使用pROC包绘制ROC曲线、获取最优阈值(threshold)及最优阈值对应的置信区间
  4. GDCM:gdcm::Scanner的测试程序
  5. Typescript 和 Javascript之间的区别
  6. [集训队作业2018] 复读机(生成函数,单位根反演)
  7. define 汉字 error C2001: newline in constant
  8. Android开发中解决自定义弹窗获取不到控件对象的问题
  9. poj1328 区间贪心 挑战程序设计竞赛
  10. C#读取xml文件静态类
  11. ios 发送请求时按home_iPhone 是否能够升级至指定的 iOS 系统版本?
  12. Android MVP和Dagger2
  13. 在Docker上运行Asp.Net Core示例网站
  14. 【论文笔记】Deep Learning Face Representation from Predicting 10,000 Classes
  15. CCS5.5.0编译问题之” XDAIS_CG_ROOT ”
  16. 【读书笔记】暗时间~
  17. ActivityMQ入门案例
  18. 推荐一款可以免费使用的电脑屏幕监控软件
  19. 一阶导数和二阶导数的一些性质
  20. 计算机wap怎么制作表格,如何在电脑上制作简单的表格?

热门文章

  1. VirtualBox启动报错
  2. 我的第一本算法书(图解算法)——什么是哈希表
  3. Python使用for循环打印直角三角形、九九乘法表、金字塔
  4. win10删除开机密码_讲解win10忘记开机密码
  5. linux QT 结束当前进程_嵌入式linux编程开发必备知识
  6. 测试面试题集-3.生活物品测试:行李箱、电梯、洗衣机
  7. has install-snap change in progress问题
  8. 05NumPy--5.3数组运算
  9. Kava将于下午2时重新启动Kava Chain
  10. SAP License:SAP不便解决的问题之六——采购组在审批策略中的作用