并发编程(十)

带有Scheduled的基本都是定时器

Executor框架的成员

(1)ThreadPoolExecutor

ThreadPoolExecutor通常使用工厂类Executors来创建。Executors可以创建3种类型的ThreadPoolExecutor:SingleThreadExecutor、FixedThreadPool和CachedThreadPool。

下面分别介绍这3种ThreadPoolExecutor。

1)FixedThreadPool。下面是Executors提供的,创建使用固定线程数的FixedThreadPool的API。

FixedThreadPool适用于为了满足资源管理的需求,而需要限制当前线程数量的应用场景,它适用于负载比较重的服务器。

2)SingleThreadExecutor。下面是Executors提供的,创建使用单个线程的SingleThread-Executor的API。

SingleThreadExecutor适用于需要保证顺序地执行各个任务;并且在任意时间点,不会有多个线程是活动的应用场景。

3)CachedThreadPool。下面是Executors提供的,创建一个会根据需要创建新线程的CachedThreadPool的API。

CachedThreadPool是大小无界的线程池,适用于执行很多的短期异步任务的小程序,或者是负载较轻的服务器。

(2)ScheduledThreadPoolExecutor

ScheduledThreadPoolExecutor通常使用工厂类Executors来创建。Executors可以创建2种类型的ScheduledThreadPoolExecutor,如下。

·ScheduledThreadPoolExecutor。包含若干个线程的ScheduledThreadPoolExecutor。

·SingleThreadScheduledExecutor。只包含一个线程的ScheduledThreadPoolExecutor。

下面分别介绍这两种ScheduledThreadPoolExecutor。

下面是工厂类Executors提供的,创建固定个数线程的ScheduledThreadPoolExecutor的API。

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize,ThreadFactory threadFactory)

ScheduledThreadPoolExecutor适用于需要多个后台线程执行周期任务,同时为了满足资源管理的需求而需要限制后台线程的数量的应用场景。下面是Executors提供的,创建单个线程的SingleThreadScheduledExecutor的API。

SingleThreadScheduledExecutor适用于需要单个后台线程执行周期任务,同时需要保证顺序地执行各个任务的应用场景。

(3)Future接口

Future接口和实现Future接口的FutureTask类用来表示异步计算的结果。当我们把Runnable接口或Callable接口的实现类提交(submit)给ThreadPoolExecutor或ScheduledThreadPoolExecutor时,ThreadPoolExecutor或ScheduledThreadPoolExecutor会向我们返回一个FutureTask对象。下面是对应的API。

(4)Runnable接口和Callable接口

Runnable接口和Callable接口的实现类,都可以被ThreadPoolExecutor或ScheduledThreadPoolExecutor执行。它们之间的区别是Runnable不会返回结果,而Callable可以返回结果。

Runnable接口和Callable接口都是Java中用于实现多线程的接口,但它们有一些不同之处。

Runnable接口:

Runnable接口是一个简单的接口,只包含一个run()方法,用于定义线程执行的代码。当一个类实现了Runnable接口后,可以将该类的对象作为参数传递给Thread类的构造函数,从而创建一个新的线程对象。在run()方法中编写线程执行的代码,当调用线程对象的start()方法时,线程开始执行run()方法中的代码。

实现Runnable接口的步骤如下:

创建一个类并实现Runnable接口。

在实现类中重写run()方法,编写线程执行的代码。

创建一个Thread对象,并将实现Runnable接口的对象作为参数传递给Thread构造函数。

调用Thread对象的start()方法启动线程。

例如:

public class MyRunnable implements Runnable {  public void run() {  // 线程执行的代码  }  
}  Thread thread = new Thread(new MyRunnable());  
thread.start();

Callable接口:

Callable接口与Runnable接口类似,也是一个简单的接口,包含一个call()方法,用于定义线程执行的代码。与Runnable不同的是,Callable可以返回结果,而Runnable没有返回值。当一个类实现了Callable接口后,可以将该类的对象传递给Executor框架中的相关方法,例如FutureTask或线程池的submit()方法,从而异步执行任务并返回结果。

实现Callable接口的步骤如下:

创建一个类并实现Callable接口。

在实现类中重写call()方法,编写线程执行的代码,并返回结果。

将实现Callable接口的对象传递给Executor框架的相关方法(例如FutureTask或线程池的submit()方法)。

通过Future对象获取任务执行的结果。

例如:

public class MyCallable implements Callable<Integer> {  public Integer call() throws Exception {  // 线程执行的代码,并返回结果  return res;  }  
}  ExecutorService executor = Executors.newFixedThreadPool(1);  
Future<Integer> future = executor.submit(new MyCallable());  
Integer result = future.get(); // 获取任务执行的结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024软件测试该如何发展?测试员怎样在内卷中走出来?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、行业现状 目前…

2024.1.22

今天主要是写了一个项目——通讯录&#xff0c;然后做了一下学校的C语言的期末复习题&#xff0c;已经开始准备C的期末了。通讯录目前是我写过最长的代码&#xff0c;但其实实现不是最复杂的&#xff0c;是因为我为了让用户友好&#xff0c;所以说加了一些很多重复的代码&#…

MySQL 8.0中新增的功能(九)

FROM_UNIXTIME()、UNIX_TIMESTAMP()和CONVERT_TZ()的64位支持 根据MySQL 8.0.28版本的更新&#xff0c;FROM_UNIXTIME()、UNIX_TIMESTAMP() 和 CONVERT_TZ() 函数现在在支持64位的平台上处理64位值。这包括64位版本的Linux、MacOS和Windows。在兼容的平台上&#xff0c;UNIX_T…

Java并发Condition 详解

1.引言 在Java并发编程中&#xff0c;线程间的协作是一个核心话题。为了实现线程间的协作&#xff0c;Java提供了多种机制&#xff0c;其中等待/通知机制是最常见的一种。在早期版本中&#xff0c;我们通过Object类提供的wait、notify和notifyAll方法来实现这种机制。然而&…

前端规范扩展

前端编程规范是基于原有vue2基础上那套《编码风格及标准》上&#xff0c;应用于vue3、typescript、vite2基础上延伸出来的扩展补充&#xff0c;持续完善 一、编码规范 ESLint 代码检测工具 Pretter 代码格式化工具配合双校验代码 Git 规范 - 编码工具 vscode 同步参考文档中…

kylin集群使用nginx反向代理

前文已经提到&#xff0c;我安装了kylin集群。 kylin3集群问题和思考&#xff08;单机转集群&#xff09;-CSDN博客文章浏览阅读151次&#xff0c;点赞3次&#xff0c;收藏6次。由于是同一个集群的&#xff0c;元数据没有变化&#xff0c;所以&#xff0c;直接将原本的kylin使用…

基础篇_开发命令行程序(输入输出,类型、变量、运算符,条件语句,循环语句,方法,package与jar)

文章目录 一. 输入输出1. System.out2. System.in3. Scanner4. 变量名5. 关键字 二. 类型、变量、运算符1. 字符与字符串字符值与字符串值转义字符文本块 2. 类型何为类型数字类型字符类型 3. 变量与运算符变量运算符 4. 练习 - 房贷计算器Math.pow()数字格式化查阅 Javadoc 三…

什么是云服务器CVM?

腾讯云服务器CVM提供安全可靠的弹性计算服务&#xff0c;腾讯云明星级云服务器&#xff0c;弹性计算实时扩展或缩减计算资源&#xff0c;支持包年包月、按量计费和竞价实例计费模式&#xff0c;CVM提供多种CPU、内存、硬盘和带宽可以灵活调整的实例规格&#xff0c;提供9个9的数…

MySQL 图书管理系统

1.需求分析 1.1项目需求分析简介 1.1.1信息需求分析 (1) 图书信息&#xff1a;包括书籍编号&#xff0c;书籍名称&#xff0c;出版社&#xff0c;作者&#xff0c;库存量&#xff0c;出版日期&#xff0c;价格&#xff0c;库存&#xff0c;剩余量&#xff0c;类别等&#xf…

rhel 9 mysql 无法远程访问(linux)

1.防火墙开启3306端口 firewall-cmd --add-port3306/tcp2.防火墙生效 firewall-cmd --runtime-to-permanent3.其他命令(停止和启动防火墙) systemctl stop firewalld systemctl start firewalld4.检查防火墙状态 firewall-cmd --check-config5.查看防火墙开启端口 firewal…

Android Retrofit使用详情

一、 Retrofit是什么 Retrofit是Android用来接口请求的网络框架&#xff0c;内部是基于OkHttp实现的&#xff0c;retrofit负责接口请求的封装&#xff0c;retrofit可以直接将接口数据解析为Bean类、List集合等&#xff0c;直接简化了中间繁琐的数据解析过程 二、 Retrofit的简单…

必须掌握的100+个Linux命令大全【持续更新中】

别有一番风趣的alias … note:: 寒蝉凄切&#xff0c;对长亭晚&#xff0c;骤雨初歇。 柳永《雨霖铃》 Linux alias命令用于设置指令的别名&#xff0c;可以将比较长的命令进行简化。 默认情况下会输出当前的设置&#xff1a; $ alias lls -lah lals -lAh llls -lh lsls --…

C++学习笔记——多态与静态联编和动态联编

目录 一、多态 二、静态联编&#xff08;Static Binding&#xff09;和动态联编&#xff08;Dynamic Binding&#xff09; 2.1静态联编 2.2动态联编 一、多态 是C中面向对象编程的一个核心概念&#xff0c;它允许派生类对象替代其基类对象&#xff0c;从而实现代码重用和扩…

ARM CCA机密计算架构软件栈(下)

三、Realm管理 本节描述软件组件中引入的软件组件如何在Realm的创建和执行期间进行交互。 3.1 资源管理 领域资源管理的基本原则是主机保持控制。这意味着主机决定使用哪个物理内存来支持给定的领域中间物理地址(IPA),或者存储RMM使用的Realm元数据的给定片段。 主机始终…

Pandas实战100例 | 案例 7: 数据分组与聚合 - 使用 `groupby` 进行分析

案例 7: 数据分组与聚合 - 使用 groupby 进行分析 知识点讲解 数据分组和聚合是数据分析中的强大工具&#xff0c;它们使我们能够按照某个或某些特定的列将数据分组&#xff0c;并对每个分组应用聚合函数&#xff0c;以便进行分析。 示例代码 基本分组与聚合 # 按照某列分…

基于昇腾910B搭建多节点K8s集群

自从 2013 年 Docker 诞生以来&#xff0c;容器一跃成为 IT 界最热门的话题。而 Kubernetes 趁着容器的东风&#xff0c;击败众多竞争对手&#xff0c;成为了“容器编排”领域的King。可以说&#xff0c;现在 Kubernetes 已经没有了实际意义上的竞争对手&#xff0c;它的地位就…

代码随想录算法训练营第17天 | 110.平衡二叉树 + 257. 二叉树的所有路径 + 404.左叶子之和

今日内容 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 110.平衡二叉树 - Easy 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1…

springboot注解@PropertySource作用

简介 PropertySource 是 Spring 框架中的一个注解&#xff0c;用于指定一个或多个属性文件&#xff08;通常是.properties文件&#xff09;这些文件包含了应用程序需要的配置信息。当你在 Spring 的配置类中使用此注解时&#xff0c;Spring 容器会加载这些属性文件&#xff0c…

01.坦克大战项目-Java绘图坐标体系

01.坦克大战项目- Java绘图 01. Java绘图坐标体系 1. 坐标体系介绍 ​ 下图说明了java坐标系。坐标原点位于左上角&#xff0c;以像素为单位。在Java坐标系中&#xff0c;第一个是x坐标系&#xff0c;表示当前位置为水平方向&#xff0c;距离坐标原点x个像素&#xff1b;第二…

揭露欧拉骗局4.“Σ1/n²=π²/6”里的猫腻

自然数平方倒数求和Σ1/n是一个并不复杂的问题&#xff0c;但它困扰了欧洲大陆整整90年&#xff0c;在欧系数学里它被称为“巴塞尔级数”。 解决巴塞尔级数让欧拉一战成名&#xff0c;然而欧拉采用的方法对数学这门学问是严重的侮辱。数学是工具学科&#xff0c;数学的宗旨是化…