线程池是管理线程的一套解决方案,主要工作:

1.控制线程数量
线程过多会消耗大量的内存,有可能引起内存溢出崩溃。并且线程数量过多会导致CPU卡顿
2.重用线程
线程不应当与任务的生命周期一致,重复使用线程可以减少线程调度器的不必要开销

public class ThreadPoolDemo {public static void main(String[] args) {ExecutorService threadPool = Executors.newFixedThreadPool(2);for(int i=0;i<5;i++){Runnable r =new Runnable(){public void run(){try{Thread t = Thread.currentThread();System.out.println(t.getName()+"正在执行任务...");Thread.sleep(5000);System.out.println(t.getName()+"正在执行任务...");}catch(Exception e){e.printStackTrace();}}};threadPool.execute(r);//将任务交给线程池System.out.println("指派一个任务交给线程池...");}threadPool.shutdownNow();System.out.println("停止线程池...");}}

JAVA SE学习day_15:thread线程池相关推荐

  1. 【java学习之路】(java SE篇)011.线程池

    线程池 为什么需要线程池 在实际使用中,线程非常的占用资源,对其管理不善很容易造成系统问题.因此在大多数并发框架中,都会使用线程池来管理线程 好处 使用线程池可以重复利用已有的线程继续执行任务,避免线 ...

  2. Java多线程学习十:线程池实现“线程复用”的原理

    线程复用原理 我们知道线程池会使用固定数量或可变数量的线程来执行任务,但无论是固定数量或可变数量的线程,其线程数量都远远小于任务数量,面对这种情况线程池可以通过线程复用让同一个线程去执行不同的任务,那 ...

  3. Java多线程学习八:线程池常用的阻塞队列

    线程池内部结构 线程池的内部结构主要由四部分组成,如图所示. 第一部分是线程池管理器,它主要负责管理线程池的创建.销毁.添加任务等管理操作,它是整个线程池的管家. 第二部分是工作线程,也就是图中的线程 ...

  4. Java多线程学习七:线程池的 4 种拒绝策略和 6 种常见的线程池

    以便在必要的时候按照我们的策略来拒绝任务,那么拒绝任务的时机是什么呢?线程池会在以下两种情况下会拒绝新提交的任务. 第一种情况是当我们调用 shutdown 等方法关闭线程池后,即便此时可能线程池内部 ...

  5. executor线程池框架_如何使用Java 5 Executor框架创建线程池

    executor线程池框架 Java 5以Executor框架的形式在Java中引入了线程池,它允许Java程序员将任务提交与任务执行分离. 如果要使用Java进行服务器端编程,则线程池是维护系统可伸 ...

  6. 如何使用Java 5 Executor框架创建线程池

    Java 5以Executor框架的形式在Java中引入了线程池,它允许Java程序员将任务提交与任务执行分离. 如果要使用Java进行服务器端编程,则线程池是维护系统可伸缩性,鲁棒性和稳定性的重要概 ...

  7. Java多线程系列(五):线程池的实现原理、优点与风险、以及四种线程池实现

    为什么需要线程池 我们有两种常见的创建线程的方法,一种是继承Thread类,一种是实现Runnable的接口,Thread类其实也是实现了Runnable接口.但是我们创建这两种线程在运行结束后都会被 ...

  8. 码出高效:Java开发手册笔记(线程池及其源码)

    码出高效:Java开发手册笔记(线程池及其源码) 码出高效:Java开发手册笔记(线程池及其源码) 码出高效:Java开发手册笔记(线程池及其源码) 前言 一.线程池的作用 线程的生命周期 二.线程池 ...

  9. java executors 详解_线程池—Executors 详解

    各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题 线 ...

最新文章

  1. JavaSE学习笔记(三)——运算符与控制语句
  2. (三)硕博生常用的英文文献下载的网站
  3. linu怎么启动oracle,请问该如何在LINUX下启动ORACLE?
  4. 为AI摄影铺路,第一个大规模的美学质量数据库
  5. std::reserve和std::resize的区别
  6. 关于stm32启动文件的选择
  7. linux执行.sql脚本 db2,DB2 如何执行sql脚本
  8. Node.js安装及环境配置之Windows篇
  9. 描述C,C++编译和链接过程
  10. 伙伴系统二叉树可视化笔记
  11. iOS ASI--POST请求
  12. VUE(7) : vue-element-admin[7] : json编辑器
  13. 自己在inode客户端的大量问题(不断更新中)(2012-02-23 21:24 )
  14. python抽奖教程_python实现抽奖小程序
  15. 生而神灵,弱而能言,幼而徇齐,长而敦敏,成而聪明
  16. 版本管理工具-SourceSafe
  17. Linux线程ID与内核LWP的关系
  18. 【audio】耳机插拔/线控按键识别流程
  19. 擦地机器人排行榜_拖地扫地机器人十大品牌排行榜哪个牌子好
  20. python爬虫(9)获取动态搞笑图片

热门文章

  1. nonatomic与atomic的区别与作用
  2. 【ZJOI2013】k大数查询 BZOJ 3110
  3. word打开时报Cannot find the Word document template:WordToRqm.dot
  4. 《Ajax实战》三部曲之“王者归来”
  5. PDO(PHP Data Object),Mysqli,以及对sql注入等问题的解决
  6. Centos6.X升级glibc解决“libc.so.6 version GLIBC_2.14 not found”报错问题
  7. hadoop--Unable to load native-hadoop library for your platform解决方法
  8. springboot springmvc 抛出全局异常解决方法
  9. <script type =“text / template”> ... </ script>的说明
  10. 为什么使用依赖注入?