【线程池处理任务】Runnable任务和Callable任务

news/2025/1/15 17:10:31/

线程池处理任务

ExecutorService的常用方法

方法名称说明
void execute(Runnable command)执行 Runnable 任务
Future< T > submit(Callable< T > task)执行 Callable 任务,返回未来任务对象,用于获取线程返回的结果
void shutdown()等全部任务执行完毕后,再关闭线程池!
List< Runnable > shutdownNow()立刻关闭线程池,停止正在执行的任务,并返回队列中未执行的任务

1.线程池处理Runnable任务

public class Demo {public static void main(String[] args) {//创建线程池对象ThreadPoolExecutor pool = new ThreadPoolExecutor(3,5,30,TimeUnit.SECONDS,new ArrayBlockingQueue<>(4),Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy() //默认拒绝策略:任务,抛出异常);//public void execute(Runnable command) 执行Runnable任务pool.execute(new MyRunnable()); //核心pool.execute(new MyRunnable()); //核心pool.execute(new MyRunnable()); //核心pool.execute(new MyRunnable()); //任务队列pool.execute(new MyRunnable()); //任务队列pool.execute(new MyRunnable()); //任务队列pool.execute(new MyRunnable()); //任务队列pool.execute(new MyRunnable()); //临时线程pool.execute(new MyRunnable()); //临时线程//pool.execute(new MyRunnable()); //被拒绝了//public void shutdown(); 等全部任务执行完毕后,关闭线程池pool.shutdown();}
}
class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "执行了");}
}

在这里插入图片描述

通过execute方法向线程池中提交Runnable任务时,流程如下:
客户端每提交一个任务,线程池就会在核心线程池中创建一个工作线程来执行这个任务,当核心线程中的线程已满时,就会将任务存储到任务队列中,等待核心线程池中的空闲线程来执行,如果任务队列满了线程会在工厂创建临时线程来执行任务,直到当前线程池总线程数量超过最大线程数时就会执行拒绝策略

2.线程池处理Callable任务

public class Demo {public static void main(String[] args) throws ExecutionException, InterruptedException {ThreadPoolExecutor pool = new ThreadPoolExecutor(3,5,30,TimeUnit.SECONDS,new ArrayBlockingQueue<>(5),Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());//public Future<T> submit(Callable<T> task); 执行Callable任务,返回未来任务对象,用来获取线程完毕返回的结果Future<Integer> ft1 = pool.submit(new MyCallable(10)); Future<Integer> ft2 = pool.submit(new MyCallable(50)); Future<Integer> ft3 = pool.submit(new MyCallable(100)); System.out.println(ft1.get()); //55System.out.println(ft2.get()); //1275System.out.println(ft3.get()); //5050pool.shutdown();}
}//求1到n的整数和,并返回结果
class MyCallable implements Callable<Integer>{//通过带参构造,注入一些数据private int n;public MyCallable() {}public MyCallable(int n){this.n = n;}@Overridepublic Integer call() throws Exception {int sum = 0;for (int i = 1; i <= n ; i++) {sum += i;}return sum;}
}

在这里插入图片描述

通过submit方法向线程池中提交Callable任务时,流程如下:
客户端每提交一个任务,线程池就会在核心线程池中创建一个工作线程来执行这个任务,当核心线程中的线程已满时,就会将任务存储到任务队列中,等待核心线程池中的空闲线程来执行,如果任务队列满了线程会在工厂创建临时线程来执行任务,直到当前线程池总线程数量超过最大线程数时就会执行拒绝策略


http://www.ppmy.cn/news/1095808.html

相关文章

如何配置docker或者k8s拉取https私人镜像仓库

如何配置docker或者k8s拉取https私人镜像仓库 局域网部署私人镜像仓库harbor&#xff0c;然后也按照流程正常生成了自签证书但是在同一网段的其他服务器上docker或者k8s都无法拉取镜像&#xff0c;网上查了很多资料&#xff0c;要么不是使用的https&#xff0c;要么就是有域名…

vue2中的列表渲染v-for

一、定义 ⽤ v-for 指令基于⼀个数组来渲染⼀个列表。 v-for 指令需要使⽤ item in items 形式的特殊语法&#xff0c;其中 items 是源数据数组&#xff0c;⽽ item 则是被迭代的数组元素的别名。 二、 遍历数组 2.1 写法 <li v-for"(item,index) in list">…

Python中的依赖管理是什么? - 易智编译EaseEditing

Python中的依赖管理是指管理和跟踪项目所依赖的外部软件包或库的过程。 在Python项目中&#xff0c;通常会使用许多第三方库或模块来实现特定的功能&#xff0c;而依赖管理就是确保这些库可以正确地安装、更新和卸载&#xff0c;以确保项目的可靠性和稳定性。 以下是Python中…

云原生Kubernetes:Yaml文件编写

目录 一、理论 1.Kubernetes与yaml文件 二、实验 1.Kubernetes与yaml文件 三、问题 1.kubectl create 和 kubectl apply区别 四、总结 一、理论 1.​​​​​​​Kubernetes与yaml文件 &#xff08;1&#xff09;Kubernetes支持管理资源对象的文件格式 Kubernetes支持…

docker 生成镜像的几个问题

docker 生成镜像的几个问题 根据jdk8.tar.gz 打包Jdk8 镜像失败运行镜像报错差不多是网络ip错误,在网上说重启docker即可解决运行mysql5.7.25 镜像失败向daemon.json文件添加内容导致docker重启失败docker run 命令常用参数根据jdk8.tar.gz 打包Jdk8 镜像失败 首选做准备工作…

如何免费获取CDH集群技术支持

CDH拥有全球70% 的Hadoop用户&#xff0c;在国内也拥有庞大的用户群体。由于Cloudera 和Hortonworks 合并后厂商政策调整&#xff0c;不再更新、不再免费、不再提供服务&#xff0c;众多企业用户生产集群面临着进退两难的窘境和未知的技术风险。 社区版不再更新。Cloudera所有…

python开发基础篇1——后端操作K8s API方式

文章目录 一、基本了解1.1 操作k8s API1.2 基本使用 二、数据表格展示K8s常见资源2.1 Namespace2.2 Node2.3 PV2.4 Deployment2.5 DaemonSet2.6 StatefulSet2.7 Pod2.8 Service2.9 Ingress2.10 PVC2.11 ConfigMap2.12 Secret2.13 优化 一、基本了解 操作K8s资源api方式&#xf…

初识Node.js与内置模块

1. 初识 Node.js 1.1 回顾与思考 1. 已经掌握了哪些技术 2. 浏览器中的 JavaScript 的组成部分 3. 思考&#xff1a;为什么 JavaScript 可以在浏览器中被执行 4. 思考&#xff1a;为什么 JavaScript 可以操作 DOM 和 BOM 5. 浏览器中的 JavaScript 运行环境 6. 思考&#xff…