java中两任务并行运行_Java并行编程中的“可调用”与“可运行”任务

java中两任务并行运行

当我们用Java编写多线程应用程序时,我们倾向于使用“ Runnable ”接口来实现线程类。

您的类必须简单地实现此接口并覆盖run方法。

对于琐碎的用例,我们可以通过调用“ start”方法直接启动线程,结果将控制流委托给run方法。

但是,在大多数应用程序中,我们最终使用线程池,该线程池管理工作线程并在任务提交到池时促进任务执行。

Java提供了各种各样的线程池,并且还允许程序员创建自己的线程池实现。

将线程任务提交给池的过程也很标准。

在某些情况下,我们可能希望我们的线程做更多的事情而不是仅仅执行一个任务。

在这种情况下,了解使用Runnable vs Callable的用例很重要。

1.从执行线程返回值

在许多情况下,您可能希望从执行线程返回一个值。

这是“可调用”任务派上用场的地方。

Java ExecutorService API允许接受Callable类型的任务,并返回“ Future”任务。

这对于某些用例可能很有用。

但是,下面给出了使用Callable的更重要的选择之一。

2.能够从执行线程中抛出检查异常

Callable的重要考虑因素之一是程序员能够从正在执行的线程中引发异常。

这可以从我们的多线程应用程序中处理异常,并可以从异常中正常恢复。

如果我们查看“调用”方法的签名,就会发现它引发了一个通用异常–

V call()引发异常

3.其他方案

Callable接口实现也可以与FutureTask结合使用。

FutureTask类接受Callable实现。

FutureTask可以提交给线程池执行器,我们可以使用标准的Future API检索执行结果。

下面的代码段

public class CallableInsideFutureTask{public static void main(String[] args){ExecutorService executor = Executors.newSingleThreadExecutor();FutureTask<String> myTask = new MyTask(new CallableTest());executor.submit(myTask);try {myTask.get();} catch (Exception ex ) {ex.printStackTrace();}executor.shutdownNow();}}

在此示例中, CallableTest类必须实现Callable接口。

如果您喜欢这篇文章,请随时在LinkedIn上进行连接。

翻译自: https://www.javacodegeeks.com/2019/04/callable-runnable-tasks-java-concurrent-programming.html

java中两任务并行运行

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

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

相关文章

Servlet中的监听器

文章目录什么是监听器如何写监听器配置监听器统计在线人数的案例什么是监听器 Servlet 规范当中定义的一种特殊的类&#xff0c;作用是监听容器当中产生的一些事件并进行相应的处理。 容器产生的事件指的是两大类事件&#xff1a; 第一大类 生命周期相关的事件&#xff0c;指…

python调用百度接口实现ocr识别_Python调用百度OCR实现图片文字识别的示例代码

百度AI提供了一天50000次的免费文字识别额度&#xff0c;可以愉快的免费使用&#xff01;下面直接上方法&#xff1a;首先在百度AI创建一个应用&#xff0c;按照下图创建即可&#xff0c;创建后会获得如下&#xff1a;创建后会获得如下信息&#xff1a;APP_ID ******API_KEY …

selenium 替代品_每个人都在谈论Selenium替代品-明智地选择!

selenium 替代品什么是Selenium&#xff1f; Selenium是一套Web浏览器自动化工具&#xff0c;用于跨多种平台实现浏览器自动化。 尽管Selenium工具具有更多功能&#xff0c;但出于测试原因&#xff0c;它们仍被用来自动化Web应用程序。 Jason Huggins于2004年创建了Selenium&am…

Maven构建Artifact时,不会创建空目录

Maven 构建的 Web 项目中&#xff0c;你在 Web Resource Directories&#xff08;默认名称是webapp&#xff09;下创建的空目录&#xff0c;在构建Artifact 时&#xff0c;并不会在构件中也创建该空目录。 下图所示的四个空目录 upload&#xff0c;在构建 Artifact 时都不会创…

通用数据保护条例_欧盟《通用数据保护条例》——2019年的形势

“自欧盟《通用数据保护条例》(GDPR)生效以来&#xff0c;很多公司企业都忙于实行全新的数据保护标准。一个完善的数据保护管理系统比以往任何时候都要重要。我们可以参考一下其他公司在GDPR方面的一些初步经验。”自2018年5月25日GDPR生效以来&#xff0c;它在某些情况下引发了…

【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐--…

caffeine 缓存_使用Caffeine和Spring Boot的多个缓存配置

caffeine 缓存缓存是几乎所有应用程序性能的关键。 有时需要分布式缓存 &#xff0c;但并非总是如此。 在许多情况下&#xff0c;本地缓存可以很好地工作&#xff0c;并且不需要分布式缓存的开销和复杂性。 因此&#xff0c;在许多应用程序中&#xff0c;包括普通的Spring和Sp…

File类的学习

文章目录简介常量常用方法代码示例简介 java.io.File 是文件和目录的路径名的抽象表示形式&#xff0c;主要用于文件和目录的创建、查找和删除等操作 常量 public static final char separatorChar // 这个常量保存系统默认的文件名分隔符&#xff0c;以字符形式保存 public…

服务器被一堆系统登录_WIN10做天高服务器客户端登录出现“操作系统原因无法登录”...

今天上午&#xff0c;有一个天联高级版的客户反馈&#xff0c;说金万维天联高级版客户端无法登录了&#xff0c;如图&#xff1a;具体错误“由于您连服务器操作系统原因”&#xff0c;具体截图如下&#xff1a;根据上图的错误提示&#xff0c;应该是天联高级版服务器的补丁失效…

selenium查找文本_在Selenium中查找具有链接文本和部分链接文本的元素

selenium查找文本Selenium中CSS定位器是一个基本概念&#xff0c;每个旨在使用Selenium执行自动化测试的测试人员都应该意识到这一点。 在Selenium中充分使用CSS定位器可以帮助您以更高效&#xff0c;更彻底的方式执行测试。 我从7年以来一直从事自动化测试行业&#xff0c;而且…

Servlet文件上传/上传文件功能的实现(commons-fileupload)

文章目录正常步骤使用 commons-fileupload.jar 实现文件上传正常步骤 step1 在 form 中&#xff0c;设置 method"post",设置 enctype"multipart/form-data"。enctype 属性用于设置表单的编码方式&#xff0c;对于文件上传&#xff0c;必须设置成"mul…

python单行箭头_在Python中,如何让箭头尖在指定的坐标处开始/结束?

我试图使用matplotlib的注释绘制两端带有箭头的直线。但当我绘制它们时&#xff0c;箭头的尖端并没有在图中所示的指定坐标处开始或结束。提示应该从0.6和0.8开始和结束&#xff0c;但它们不是。在可复制代码import matplotlib.pyplot as pltfig plt.figure(figsize (5, 5))p…

MySQL 8.x 修改root用户密码/修改密码/重置密码/忘记密码(为了避免掉坑,值得收藏)

操作系统&#xff1a;CentOS Linux release 8.2.2004 (Core) MySQL版本&#xff1a;mysql Ver 8.0.26 for Linux on x86_64 (Source distribution) 忘记 root 用户的密码&#xff0c;然后我以无需“权限验证”的方式启动 MySQL 服务器&#xff08;具体方法参考这里&#xff09…

sql 账号查询一个表勾选那个权限_Spring Cloud微服务架构中的数据权限DataPermision实现方案...

Spring Cloud微服务架构中的数据权限DataPermision实现方案一、出现原因在Spring Cloud的微服务架构中&#xff0c;常见的权限控制除了菜单权限外&#xff0c;还有数据权限DataPermision。菜单权限主要用于控制用户角色所能访问的菜单以及页面按钮的显示与否&#xff0c;而数据…

科学计数法详解

1.4013E-45 1.4013 * 10 的 -45 次方 1.4013 * 10 的 45 次方的倒数 1.4013 * 10 的 45 次方分之一 1.4013 * 1/10 的 45 次方。 算术表达式&#xff1a;1.4013E-45 1.4013 * 10−4510^{-45}10−45 1.4013 * 11045\frac{1}{10^{45}}10451​ 1.4013 * (110)45(\frac{1}{…

程序中抛出空指针异常_从Java应用程序中消除空指针异常

程序中抛出空指针异常这篇文章简要介绍了Java 8的最有用但又“毫不夸张”的功能。 程序员花费了无尽的时间来纠正最常见但最危险的错误之一&#xff0c;即Null指针异常。 空指针异常会导致我们的应用程序意外中断&#xff0c;并且很难预先检测到。 在许多情况下&#xff0c;…

python token post403原因_Django的POST请求时因为开启防止csrf,报403错误,及四种解决方法...

Django默认开启防止csrf(跨站点请求伪造)攻击&#xff0c;在post请求时&#xff0c;没有上传 csrf字段&#xff0c;导致校验失败&#xff0c;报403错误解决方法1&#xff1a;注释掉此段代码&#xff0c;即可。缺点&#xff1a;导致Django项目完全无法防止csrf攻击解决方法2&…

BigDecimal详解

文章目录为什么要使用BigDecimal构造方法加减乘除舍入模式&#xff08;对BigDecimal进行截取&#xff09;取余数比较大小BigDecimal 转 StringBigDecimal与double和int转换格式化显示 BigDecimal使用DecimalFormat使用String.format()总结为什么要使用BigDecimal double类型的…

java序列化和反序列化_Java恶意序列化背后的历史和动机

java序列化和反序列化与Java的序列化机制相关的问题已广为人知。 有效的Java 1st Edition &#xff08;第10章&#xff09;和有效的Java 2nd Edition &#xff08;第11章&#xff09;的整个最后一章都专门讨论Java的序列化主题。 Effective Java 3rd Edition &#xff08;第12章…

python元祖迭代_如何在Python中迭代元组的堆栈

我尝试在Python中使用预定义为的DepthFirstSearch类实现DepthFirstSearch算法&#xff1a;class Stack:def __init__(self):self.list []def push(self,item):self.list.append(item)def pop(self):return self.list.pop()def isEmpty(self):return len(self.list) 0我还有一…