1. package com.aaa.threaddemo;
  2.  
  3. import java.util.concurrent.ArrayBlockingQueue;
  4. import java.util.concurrent.ExecutorService;
  5. import java.util.concurrent.Executors;
  6. import java.util.concurrent.LinkedBlockingQueue;
  7. import java.util.concurrent.ScheduledExecutorService;
  8. import java.util.concurrent.ThreadPoolExecutor;
  9. import java.util.concurrent.TimeUnit;
  10.  
  11. /*
  12. *一 四种常见的线程池是啥?
  13. * newFixedThreadPool
  14. * 1.创建一个可重用固定线程数的线程池, 2.使用共享的无界队列方式来运行这些线程。
  15. *
  16. * newCachedThreadPool
  17. * 1.可根据需要创建新线程的线程池 2.旧的线程可用时将重用他们 3.对短期异步的程序 可提高程序性能
  18. *
  19. * newSingleThreadExecutor
  20. * 1.返回一个线程池,只有一个线程 2.可以在旧的线程挂掉之后,重新启动一个新的线程来替代它。 达到起死回生的效果。
  21. *
  22. * newScheduledThreadPool
  23. * 给定一个延迟后,可以运行命令或者定期执行。
  24. * java中线程池的顶级接口是Executor 严格而言,正在的线程池是ExecutorService
  25. *
  26. *二 阻塞队列 LinkedBlockingQueue 使用注意事项?
  27. *
  28. *三 线程池提交任务的方式?
  29. *
  30. *四 shutdown 的使用方式?
  31. *
  32. *五 线程池中的常用参数设置?
  33. */
  34.  
  35. /*
  36. 二 newFixedThreadPool
  37. * 1.创建一个固定大小的线程池
  38. * 2.提交一个任务,就创建一个线程,直到线程池的最大容量。
  39. * 3.线程池的大小达到最大值,就保持不变。
  40. * 4.有执行异常而结束的线程,线程池会补充一个新的线程。
  41. * 5.使用完毕,必须手动关闭线程池,否则会一直存在内存中
  42. *
  43. * 看一下newFiexdThreadPool()的内心世界
  44. public static ExecutorService newFixedThreadPool(int nThreads) {
  45. return new ThreadPoolExecutor(nThreads, nThreads,
  46. 0L, TimeUnit.MILLISECONDS,
  47. new LinkedBlockingQueue<Runnable>());
  48. */
  49.  
  50. public class ThreaPoolUser {
  51. public static void main(String[] args) {
  52. ExecutorService fixedPool = Executors.newFixedThreadPool(2); //创建一个可重用,固定线程数的线程池 容量为 2
  53.  
  54. /*
  55. 线程池的容量是2,我这里放入了3个线程,线程池会如何处理?
  56. 可以看到这里有个没有指定容量的队列 linkedBlockingQueue,此时的队列就是一个无边界的队列。
  57. 可以不断的在队列中添加任务
  58. 多放一个问题不大,300000个呢? 任务过多,就会导致内存溢出。
  59.  
  60. 【注意!】
  61. linkedBlockingQueue
  62. 本身是一个用链表结实现的有界阻塞队列,容量是可以设置的。
  63. 较好的使用方式
  64.  
  65. 五 ExecutorService executorService = new ThreadPoolExecutor(
  66. 10, //核心线程数
  67. 13, //线程池最大容量
  68. 60L, //非核心线程的生存时间
  69. TimeUnit.SECONDS, //生存的时间单位
  70. new ArrayBlockingQueue(10)); //设置队列中的容量
  71. */
  72. FiexdDemo fiexdDemo = new FiexdDemo();
  73. FiexdDemo fiexdDemo2 = new FiexdDemo();
  74. FiexdDemo fiexdDemo3 = new FiexdDemo();
  75.  
  76. /*
  77. 三 线程池提交任务的方式有两种
  78. * 1.execute
  79. * 提交的是runnable类型的任务,下文的线程是继承了thread,thread又是runnable的实现类。
  80. * 提交是没有返回值的
  81. * 遇到异常直接抛出
  82. *
  83. * 2.submit
  84. * runnable 和 callable 都可提交
  85. * 返回一个future类型的对象
  86. * 将异常存储,调用future get方法 才会抛出异常
  87. */
  88. fixedPool.execute(fiexdDemo);
  89. fixedPool.execute(fiexdDemo2);
  90. fixedPool.execute(fiexdDemo3);
  91.  
  92. /*
  93. 四 shutdown()
  94. * 1.把线程池的状态设置为 shutdown,但是并不会马上停止
  95. * 2.停止接受外部的submit 任务
  96. * 3.线程池正在运行的任务,队列中等待的任务,会执行完
  97. * 4.完成后,才是真正的停止
  98. */
  99. fixedPool.shutdown(); //手动关闭线程池
  100. }
  101. }
  102.  
  103. /*
  104. * 上面已经创建好了一个固定的线程池,这边创建一个多线程。
  105. * 把线程放进 线程池中就完事了。
  106. */
  107. class FiexdDemo extends Thread{
  108. @Override
  109. public void run() {
  110. System.out.println("我是一个线程");
  111. System.out.println("[currentThread = ]" + Thread.currentThread().getName());
  112. }
  113. }

看下结果

常见线程池 newFixedThreadPool 的简单使用的更多相关文章

  1. 常见线程池之 newCacheThreadPool 缓存线程池 简单使用

    package com.aaa.threaddemo; import java.util.concurrent.BlockingQueue; import java.util.concurrent.E ...

  2. (CSDN迁移) JAVA多线程实现-可控最大并发数线程池(newFixedThreadPool)

    上篇文章中介绍了单线程化线程池newSingleThreadExecutor,可控最大并发数线程池(newFixedThreadPool)与其最大的区别是可以通知执行多个线程,可以简单的将newSin ...

  3. 常见线程池 newScheduledThreadPool 定时执行任务的线程池 简单介绍

    一  定时任务 package com.aaa.threaddemo; import static java.util.concurrent.TimeUnit.NANOSECONDS; import ...

  4. JUC之线程池基础与简单源码分析

    线程池 定义和方法 线程池的工作时控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等待其他线程执行完成,再从队列中取出任 ...

  5. java 线程池 ---- newFixedThreadPool()

    class MyThread implements Runnable{ private int index; public MyThread(int index){ this.index = inde ...

  6. 6、java5线程池之固定大小线程池newFixedThreadPool

    JDK文档说明: 创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程.在任意点,在大多数 nThreads 线程会处于处理任务的活动状态.如果在所有线程处于活动状态时提交附加任务,则 ...

  7. java 线程池newFixedThreadPool

    工作中遇到一个这样的情况,List中的元素要每个遍历出来,然后作为参数传给后面通过spark做数据处理,元素太多,一个一个的遍历速度太慢,于是考虑使用多线程,代码如下:(已删除部分代码) 想了解更多线 ...

  8. Executor线程池的简单使用

    我们都知道创建一个线程可以继承Thread类或者实现Runnable接口,实际Thread类就是实现了Runnable接口. 到今天才明白后端线程的作用:我们可以开启线程去执行一些比较耗时的操作,类似 ...

  9. c++简单线程池实现

    线程池,简单来说就是有一堆已经创建好的线程(最大数目一定),初始时他们都处于空闲状态,当有新的任务进来,从线程池中取出一个空闲的线程处理任务,然后当任务处理完成之后,该线程被重新放回到线程池中,供其他 ...

随机推荐

  1. Codeforces Gym-100985C: MaratonIME plays Nim(交互题&博弈)

    C. MaratonIME plays Nim time limit per test : 2.0 smemory limit per test : 64 MBinputstandard inputo ...

  2. 第五个知识点 复杂性为NP类是什么意思

    第五个知识点 复杂性为NP类是什么意思 原文地址:http://bristolcrypto.blogspot.com/2014/11/52-things-number-5-what-is-meant- ...

  3. Proximal Algorithms 2 Properties

    目录 可分和 基本的运算 不动点 fixed points Moreau decomposition 可分和 如果\(f\)可分为俩个变量:\(f(x, y)=\varphi(x) + \psi(y) ...

  4. 网站迁移纪实:从Web Form 到 Asp.Net Core (Abp vNext 自定义开发)

    问题和需求 从2004年上线,ZLDNN.COM运行已经超过16年了,一直使用DotNetNuke平台(现在叫DNN Platform),从最初的DotNetNuke 2.1到现在使用的7.4.先是在 ...

  5. [源码解析] PyTorch 分布式之弹性训练(7)---节点变化

    [源码解析] PyTorch 分布式之弹性训练(7)---节点变化 目录 [源码解析] PyTorch 分布式之弹性训练(7)---节点变化 0x00 摘要 0x01 变化方式 1.1 Scale-d ...

  6. 比例阀驱动电路后级PWM滤波尖刺如何消除?PWM通过RC低通滤波器模拟DAC

    双头比例阀驱动电路,采用单片机输出2路PWM,分别驱动功率器件(U100的2和4脚),经过U100的8和10脚输出供电电源的高压PWM波形,这个高压PWM经过R104和R114分别采样后经过电流放大器 ...

  7. Java高级程序设计笔记 • 【第2章 多线程(一)】

    全部章节   >>>> 本章目录 2.1 线程的概述 2.1.1 进程 2.1.2 多线程优势 2.1.3 Thread 类 2.1.4 实践练习 2.2 Runnable接口 ...

  8. VMware客户端vSphere Web Client新建虚拟机

    1.说明 vSphere Web Client是为管理员提供的一款通用的. 基于浏览器的VMware管理工具, 能够监控并管理VMware基础设施. 由于需要登录的宿主机安装的是ESXi-6.5.0, ...

  9. Storm集群安装Version1.0.1

    Storm集群安装,基于版本1.0.1, 使用apache-storm-1.0.1.tar.gz安装包. 1.安装规划 角色规划 IP/机器名 安装软件 运行进程 nimbus zdh-237 sto ...

  10. Kafka集群安装Version2.10

    Kafka集群安装,基于版本2.10, 使用kafka_2.10-0.10.1.0.tgz安装包. 1.安装规划 Storm集群模式,安装到下面三台机器 IP Hostname 10.43.159.2 ...