常见线程池 newFixedThreadPool 的简单使用
- package com.aaa.threaddemo;
- import java.util.concurrent.ArrayBlockingQueue;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import java.util.concurrent.LinkedBlockingQueue;
- import java.util.concurrent.ScheduledExecutorService;
- import java.util.concurrent.ThreadPoolExecutor;
- import java.util.concurrent.TimeUnit;
- /*
- *一 四种常见的线程池是啥?
- * newFixedThreadPool
- * 1.创建一个可重用固定线程数的线程池, 2.使用共享的无界队列方式来运行这些线程。
- *
- * newCachedThreadPool
- * 1.可根据需要创建新线程的线程池 2.旧的线程可用时将重用他们 3.对短期异步的程序 可提高程序性能
- *
- * newSingleThreadExecutor
- * 1.返回一个线程池,只有一个线程 2.可以在旧的线程挂掉之后,重新启动一个新的线程来替代它。 达到起死回生的效果。
- *
- * newScheduledThreadPool
- * 给定一个延迟后,可以运行命令或者定期执行。
- * java中线程池的顶级接口是Executor 严格而言,正在的线程池是ExecutorService
- *
- *二 阻塞队列 LinkedBlockingQueue 使用注意事项?
- *
- *三 线程池提交任务的方式?
- *
- *四 shutdown 的使用方式?
- *
- *五 线程池中的常用参数设置?
- */
- /*
- 二 newFixedThreadPool
- * 1.创建一个固定大小的线程池
- * 2.提交一个任务,就创建一个线程,直到线程池的最大容量。
- * 3.线程池的大小达到最大值,就保持不变。
- * 4.有执行异常而结束的线程,线程池会补充一个新的线程。
- * 5.使用完毕,必须手动关闭线程池,否则会一直存在内存中
- *
- * 看一下newFiexdThreadPool()的内心世界
- public static ExecutorService newFixedThreadPool(int nThreads) {
- return new ThreadPoolExecutor(nThreads, nThreads,
- 0L, TimeUnit.MILLISECONDS,
- new LinkedBlockingQueue<Runnable>());
- */
- public class ThreaPoolUser {
- public static void main(String[] args) {
- ExecutorService fixedPool = Executors.newFixedThreadPool(2); //创建一个可重用,固定线程数的线程池 容量为 2
- /*
- 线程池的容量是2,我这里放入了3个线程,线程池会如何处理?
- 可以看到这里有个没有指定容量的队列 linkedBlockingQueue,此时的队列就是一个无边界的队列。
- 可以不断的在队列中添加任务
- 多放一个问题不大,300000个呢? 任务过多,就会导致内存溢出。
- 【注意!】
- linkedBlockingQueue
- 本身是一个用链表结实现的有界阻塞队列,容量是可以设置的。
- 较好的使用方式
- 五 ExecutorService executorService = new ThreadPoolExecutor(
- 10, //核心线程数
- 13, //线程池最大容量
- 60L, //非核心线程的生存时间
- TimeUnit.SECONDS, //生存的时间单位
- new ArrayBlockingQueue(10)); //设置队列中的容量
- */
- FiexdDemo fiexdDemo = new FiexdDemo();
- FiexdDemo fiexdDemo2 = new FiexdDemo();
- FiexdDemo fiexdDemo3 = new FiexdDemo();
- /*
- 三 线程池提交任务的方式有两种
- * 1.execute
- * 提交的是runnable类型的任务,下文的线程是继承了thread,thread又是runnable的实现类。
- * 提交是没有返回值的
- * 遇到异常直接抛出
- *
- * 2.submit
- * runnable 和 callable 都可提交
- * 返回一个future类型的对象
- * 将异常存储,调用future get方法 才会抛出异常
- */
- fixedPool.execute(fiexdDemo);
- fixedPool.execute(fiexdDemo2);
- fixedPool.execute(fiexdDemo3);
- /*
- 四 shutdown()
- * 1.把线程池的状态设置为 shutdown,但是并不会马上停止
- * 2.停止接受外部的submit 任务
- * 3.线程池正在运行的任务,队列中等待的任务,会执行完
- * 4.完成后,才是真正的停止
- */
- fixedPool.shutdown(); //手动关闭线程池
- }
- }
- /*
- * 上面已经创建好了一个固定的线程池,这边创建一个多线程。
- * 把线程放进 线程池中就完事了。
- */
- class FiexdDemo extends Thread{
- @Override
- public void run() {
- System.out.println("我是一个线程");
- System.out.println("[currentThread = ]" + Thread.currentThread().getName());
- }
- }
看下结果
常见线程池 newFixedThreadPool 的简单使用的更多相关文章
- 常见线程池之 newCacheThreadPool 缓存线程池 简单使用
package com.aaa.threaddemo; import java.util.concurrent.BlockingQueue; import java.util.concurrent.E ...
- (CSDN迁移) JAVA多线程实现-可控最大并发数线程池(newFixedThreadPool)
上篇文章中介绍了单线程化线程池newSingleThreadExecutor,可控最大并发数线程池(newFixedThreadPool)与其最大的区别是可以通知执行多个线程,可以简单的将newSin ...
- 常见线程池 newScheduledThreadPool 定时执行任务的线程池 简单介绍
一 定时任务 package com.aaa.threaddemo; import static java.util.concurrent.TimeUnit.NANOSECONDS; import ...
- JUC之线程池基础与简单源码分析
线程池 定义和方法 线程池的工作时控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等待其他线程执行完成,再从队列中取出任 ...
- java 线程池 ---- newFixedThreadPool()
class MyThread implements Runnable{ private int index; public MyThread(int index){ this.index = inde ...
- 6、java5线程池之固定大小线程池newFixedThreadPool
JDK文档说明: 创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程.在任意点,在大多数 nThreads 线程会处于处理任务的活动状态.如果在所有线程处于活动状态时提交附加任务,则 ...
- java 线程池newFixedThreadPool
工作中遇到一个这样的情况,List中的元素要每个遍历出来,然后作为参数传给后面通过spark做数据处理,元素太多,一个一个的遍历速度太慢,于是考虑使用多线程,代码如下:(已删除部分代码) 想了解更多线 ...
- Executor线程池的简单使用
我们都知道创建一个线程可以继承Thread类或者实现Runnable接口,实际Thread类就是实现了Runnable接口. 到今天才明白后端线程的作用:我们可以开启线程去执行一些比较耗时的操作,类似 ...
- c++简单线程池实现
线程池,简单来说就是有一堆已经创建好的线程(最大数目一定),初始时他们都处于空闲状态,当有新的任务进来,从线程池中取出一个空闲的线程处理任务,然后当任务处理完成之后,该线程被重新放回到线程池中,供其他 ...
随机推荐
- Codeforces Gym-100985C: MaratonIME plays Nim(交互题&博弈)
C. MaratonIME plays Nim time limit per test : 2.0 smemory limit per test : 64 MBinputstandard inputo ...
- 第五个知识点 复杂性为NP类是什么意思
第五个知识点 复杂性为NP类是什么意思 原文地址:http://bristolcrypto.blogspot.com/2014/11/52-things-number-5-what-is-meant- ...
- Proximal Algorithms 2 Properties
目录 可分和 基本的运算 不动点 fixed points Moreau decomposition 可分和 如果\(f\)可分为俩个变量:\(f(x, y)=\varphi(x) + \psi(y) ...
- 网站迁移纪实:从Web Form 到 Asp.Net Core (Abp vNext 自定义开发)
问题和需求 从2004年上线,ZLDNN.COM运行已经超过16年了,一直使用DotNetNuke平台(现在叫DNN Platform),从最初的DotNetNuke 2.1到现在使用的7.4.先是在 ...
- [源码解析] PyTorch 分布式之弹性训练(7)---节点变化
[源码解析] PyTorch 分布式之弹性训练(7)---节点变化 目录 [源码解析] PyTorch 分布式之弹性训练(7)---节点变化 0x00 摘要 0x01 变化方式 1.1 Scale-d ...
- 比例阀驱动电路后级PWM滤波尖刺如何消除?PWM通过RC低通滤波器模拟DAC
双头比例阀驱动电路,采用单片机输出2路PWM,分别驱动功率器件(U100的2和4脚),经过U100的8和10脚输出供电电源的高压PWM波形,这个高压PWM经过R104和R114分别采样后经过电流放大器 ...
- Java高级程序设计笔记 • 【第2章 多线程(一)】
全部章节 >>>> 本章目录 2.1 线程的概述 2.1.1 进程 2.1.2 多线程优势 2.1.3 Thread 类 2.1.4 实践练习 2.2 Runnable接口 ...
- VMware客户端vSphere Web Client新建虚拟机
1.说明 vSphere Web Client是为管理员提供的一款通用的. 基于浏览器的VMware管理工具, 能够监控并管理VMware基础设施. 由于需要登录的宿主机安装的是ESXi-6.5.0, ...
- Storm集群安装Version1.0.1
Storm集群安装,基于版本1.0.1, 使用apache-storm-1.0.1.tar.gz安装包. 1.安装规划 角色规划 IP/机器名 安装软件 运行进程 nimbus zdh-237 sto ...
- Kafka集群安装Version2.10
Kafka集群安装,基于版本2.10, 使用kafka_2.10-0.10.1.0.tgz安装包. 1.安装规划 Storm集群模式,安装到下面三台机器 IP Hostname 10.43.159.2 ...