Callable 应该优先于 Runnable 吗?

2024-04-03

我已经明白了之间的区别Runnable and CallableJava 中的接口。从 Java 1.5 开始,添加了额外的功能Runnable接口并被调用Callable以保持向后兼容性。

我的问题是现在我们有Callable接口,我们应该一直使用它吗?不使用的用例有哪些Callable并使用Runnable?

(This https://stackoverflow.com/questions/141284/the-difference-between-the-runnable-and-callable-interfaces-in-java有一篇很好的文章介绍了它们之间的区别)


两者都有其用途,并且都受到 java.util.concurrent 中的 Executor 框架的支持。 Runnable 已经存在了很长时间,但它仍然在使用并且没有被气馁。

可调用对象可以抛出异常并返回值,这使得它们成为结果承载任务的更好抽象(例如从网络获取资源、执行昂贵的值计算等)[来自Java 并发实践戈茨、布洛赫等人。 al.,Java 并发性的标准工作]。

因此,如果您正在设计 API,我建议尽可能使用 Callables。如果您确定任务不会返回值并且不会引发异常,那么 Runnable 也是一个有效的选择。这里没有黑白之分,特别是因为 Runnables 可以很容易地包装在 Callables 中,反之亦然。

顺便说一句,请注意您的 Callable 实现不需要声明throws Exception;事实上 Callable 本身声明它只是为了允许实现者抛出任何已检查的异常。不过,仅依赖 Callable 接口的 Callable 调用者必须编写异常处理代码。
另请注意,Callables 不需要返回值;你可以简单地声明你的 Callable 返回Void(大写'V').

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Callable 应该优先于 Runnable 吗? 的相关文章

  • 在 mvn 命令中指定 pom.xml 并混合其他项目的目标

    我有多个问题 我可以在 mvn 命令中指定 pom xml 吗 在当前项目上执行 mvn 命令时 我可以混合另一个项目的目标吗 例如 mvn clean otherproject comple otherproject install ot
  • 从 java sdk 向对等方发送提案时出现访问被拒绝错误

    我正在尝试使用以下代码查询区块链并收到访问被拒绝错误 我也遇到同样的错误sendTransactionProposal方法也是如此 UserContext adminUserContext RegisterEnrollUser regist
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • GWT - 如何组织项目以拥有多个网页以及它们之间的导航

    我是 GET 的新手 顺便说一句 它给我留下了深刻的印象 并且发现它对于像我这样熟悉 C NET 桌面技术并愿意编写 Web 应用程序的人来说非常有吸引力 我根据 GWT Eclipse 向导生成的示例启动了自己的项目 该项目生成带有面板的
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • 当客户端关闭连接时,Spring StreamingResponseBody 请求线程未清理

    我在控制器中有一个端点 它返回一个StreamingResponseBody 用于向客户端发送文件 其代码大致如下 RestController RequestMapping value api public class Controlle
  • 来自十六进制代码的 Apache POI XSSFColor

    我想将单元格的前景色设置为十六进制代码中的给定颜色 例如 当我尝试将其设置为红色时 style setFillForegroundColor new XSSFColor Color decode FF0000 getIndexed 无论我在
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • 了解joda时间PeriodFormatter

    我以为我明白了 但显然我不明白 你能帮我通过这些单元测试吗 Test public void second assertEquals 00 00 01 OurDateTimeFormatter format 1000 Test public
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • OpenCSV:将嵌套 Bean 映射到 CSV 文件

    我正在尝试将 bean 映射到 CSV 文件 但问题是我的 bean 具有其他嵌套 bean 作为属性 所发生的情况是 OpenCSV 遍历属性找到一个 bean 然后进入其中并映射该 bean 内的所有数据 如果找到另一个 bean 它就
  • 如何使用play框架上传多个文件?

    我在用play framework 2 1 2 使用java我正在创建视图来上传多个文件 我的代码在这里 form action routes upload up enctype gt multipart form data
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp

随机推荐

  • 如何使用 C# MVC4 调用 $.ajax 中的错误函数?

    我有一个使用 C 的 MVC4 项目 在这个项目中 我的一个控制器有一个由 Ajax 函数调用的方法 HttpPost public string EditPackage int id string newPkgName try do lo
  • 锁定数据库记录以进行编辑

    我有一个 SQL Server 2008 数据库和一个 asp net 前端 我想在用户当前正在编辑记录但不确定哪种方法是最佳方法时实现锁定 我的想法是有一个isLocked记录的列 当用户拉出该记录时 它会设置为 true 这意味着所有其
  • 为 Sublime Text 2 的嵌入式 Python 解释器安装 IPython

    我正在尝试在 sublime 中安装 IpythonIntegration 包 我安装在 bash shell 中 最新的 ipython pyzmq pyside 然而 崇高控制台仍然给我一个错误 Reloading plugin hom
  • 如何设置完全离线的 Cordova 构建?

    我使用 Cordova 创建了一个测试项目cordova create hello com example hello HelloWorld cd hello cordova platform add android 我第一次用它构建它co
  • 如何使用 DataContractJsonSerializer 处理 Json?

    我有这样的 json 结构 id 12345 first name dino last name he emails preferred 1 personal 2 business 3 other 4 我想获取电子邮件中的值 所以我写了两个
  • 为什么我不应该将序列化数组插入到我的数据库字段中?

    我刚刚看到这个问题的第一条评论在 PHP 中插入序列化数组 https stackoverflow com questions 3588957 inserting into a serialized array in php这让我想知道为什
  • 从类变量引用静态方法

    我知道有这样的情况是有原因的 但不知何故我有它 class foo static method staticmethod def test pass class variable c name i 有什么办法呢 仅供记录 我相信这应该被视为
  • C++ 抛出取消引用的指针

    下面抛出的异常对象的类型是什么 问题1 gt range error r error throw r 答案1 gt range error 的对象 问题2 gt exception p r throw p 答案2 gt 异常的切片对象 问题
  • 如何根据 RFC 2231 对文件名进行编码?

    我需要在 Content Disposition HTTP 标头属性处对文件附件进行编码 我注意到 RFC 2231 是最新的广泛接受的标准 并且想使用它 然而 我很难在核心 Java SE 和 Java EE 库中找到它的实现 你们有什么
  • 汇编,多个参数 -m32 / linux (与 C 中的 stdarg 相同)

    为了解决这个问题 我了解C 而且我仍然是汇编的初学者 所以我在这里遇到了一个小问题 我在获取多个参数时遇到了一些麻烦 如果我应该这样做的话 也许可以对它们进行计数 并在汇编代码中使用格式参数 尝试向具有许多参数的字符串添加一些字节 我知道如
  • bash.exe:警告:找不到/tmp,请创建

    为什么我的崇高文本给我警告 bash exe 警告 找不到 tmp 请创建 尽管它正在正确构建和运行代码 请帮助我看到这个警告后感到很恼火 我搜索了整个网络 但找不到任何解决方案 此错误消息具有误导性 至少对我来说 创建 tmp 目录后并没
  • Flash / Java Applet 的 NPAPI 插件替代方案

    我的问题是关于 2014 年 12 月后 chrome 宣布不支持 NPAPI 插件 Firefox 也遵循同样的规定 我的一个旧应用程序中有一个基于 NPAPI 的插件 到目前为止该插件运行良好 但在 Chrome 和 Firefox 发
  • 将常规文件复用为 Mpeg TS

    我正在使用 mpeg2 ts 和 ISDB T 综合服务数字广播 地面 的文件广播方法工作 我的问题是我无法将文件放入数据流中 或者作为原始视频 或者在mpeg ts 我使用 ffmpeg 和 avconv 这是一个测试示例 ffmpeg
  • java中的变量定义使用接口还是类型?

    ArrayList aList new ArrayList List aList new ArrayList 这两者有什么区别 哪个更好用 为什么 List 是一个接口 而 ArrayList 是该接口的实现 第二种更好 因为这意味着您可以
  • Firebird ADO.NET 4.10.0.0 数据提供程序是否可以与 Firebird 3.0 一起使用?

    我目前正在尝试将我的 ASP net 4 5 项目连接到最近发布的 Firebird 3 0 我使用的是 Visual Studio 2015 社区版 Firebird 3 64 位 并使用 NuGet 获取 ADO NET 4 10 0
  • 尝试将设备注册到 Bluemix 上的 IBM Mobile First Push 服务时,iOS 应用程序崩溃

    我有一个在 iPad mini 4 iOS 9 0 2 上运行的 iOS 9 应用程序 尝试将设备注册到 Bluemix 上的 IMFPush 服务实例时 它崩溃了 以下是在我的应用程序委托中执行注册的代码 func application
  • 如何在 BigQuery 中选择包含所有 NULL 值的数据列

    如何在 BigQuery 中选择包含所有 NULL 值的数据列 A B C NULL 1 NULL NULL NULL NULL NULL 2 NULL NULL 3 NULL 我想检索 A 列和 C 列 请您帮忙 扩展我对米哈伊尔答案的评
  • RTSP服务器java实现问题:(

    我正在编写 RTSP 服务器并遇到一些问题 我使用 VLC 作为客户端 服务器从客户端 VLC 播放器 接收 OPTIONS DESCRIBE SETUP 和 PLAY 命令并回答该命令 通过 SETUP 命令客户端发送端口号 我正在使用该
  • HTML/CSS - 神秘的顶部填充不会消失

    我正在使用 CSS 制作列布局 并且进展顺利 令人惊讶的是 我的问题不是如何让专栏发挥作用 而是如何让专栏发挥作用 这就是功能 但我的专栏顶部却出现了一个令人毛骨悚然的神秘 填充 它正在压低内容 我在这里准备了一个例子 jsFiddle h
  • Callable 应该优先于 Runnable 吗?

    我已经明白了之间的区别Runnable and CallableJava 中的接口 从 Java 1 5 开始 添加了额外的功能Runnable接口并被调用Callable以保持向后兼容性 我的问题是现在我们有Callable接口 我们应该