获取线程的输出

2024-03-18

您认为获取线程工作结果的最佳方式是什么?想象一个线程执行一些计算,如何警告主程序计算已完成?

您可以每隔 X 毫秒轮询一些名为“作业完成”的公共变量或顺便说一句,但是您会收到比可用结果更晚的结果……主代码将浪费时间等待它们。另一方面,如果您使用较低的 X,CPU 将浪费多次轮询。

那么,您如何知道线程或某些线程已完成其工作呢?

抱歉,如果它看起来与其他类似question https://stackoverflow.com/questions/289434/how-to-make-a-java-thread-wait-for-another-threads-output,这可能就是原因eben回答,我想。我的意思是运行大量线程并知道所有线程何时完成,而不需要轮询它们。

我更多地考虑使用批次线程在多个 CPU 之间共享 CPU 负载,并知道批次何时完成。我想这可以用Futures 对象,但是阻塞get方法看起来很像隐藏的锁,不是我喜欢的。

感谢大家的支持。虽然我也喜欢这个答案erickson, 我认为saua是最完整的,我将在自己的代码中使用它。


不要使用低级结构,例如线程,除非您绝对需要强大的功能和灵活性。

您可以使用执行服务 http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html如那个线程池执行器 http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html to submit() http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html#submit(java.util.concurrent.Callable) 可调用对象 http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html。这将返回一个Future http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html object.

使用那个Future对象,您可以轻松检查它是否完成并获取结果(包括阻塞get()如果尚未完成)。

这些构造将极大地简化最常见的线程操作。

我想澄清一下屏蔽的情况get():

这个想法是你想要运行一些任务(Callables) 执行一些您现在不需要结果的工作(计算、资源访问等)。你可以只依靠Executor随时运行您的代码(如果它是ThreadPoolExecutor那么只要有空闲线程可用,它将运行)。然后在某个时间点,您可能需要计算结果才能继续。此时你应该调用get()。如果此时任务已经运行,那么get()将立即返回值。如果任务没有完成,那么get()调用将等待,直到任务完成。这通常是所希望的,因为无论如何,如果没有任务结果,您就无法继续。

当您不需要该值来继续,但想知道它是否已经可用(可能在 UI 中显示某些内容)时,您可以轻松调用isDone()并且只调用get()如果返回true).

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

获取线程的输出 的相关文章

  • 使用 proguard 混淆文件名

    我正在使用 proguard 和 Android Studio 混淆我的 apk 当我反编译我的apk时 我可以看到很多文件 例如aaa java aab java ETC 但我项目中的所有文件都有原始名称 有没有办法混淆我的项目的文件名
  • 在不支持 CAS 操作的处理器上进行 CompareAndSet

    今天 我在一次采访中被问到下一个问题 如果您在具有不支持 CAS 操作的处理器的机器上调用 AtomicLong 的compareAndSet 方法 会发生什么情况 您能否帮我解决这个问题 并在可能的情况下提供一些全面描述的链接 From
  • Java 中的 <-- 是什么? [复制]

    这个问题在这里已经有答案了 我遇到了下面的片段 它输出到4 3 2 1 我从来没有遇到过 lt 在爪哇 Is lt 使 var1 的值变为 var2 的运算符 public class Test public static void mai
  • 什么是内部类的合成反向引用

    我正在寻找应用程序中的内存泄漏 我正在使用的探查器告诉我寻找这些类型的引用 但我不知道我在寻找什么 有人可以解释一下吗 Thanks Elliott 您可以对 OUTER 类进行合成反向引用 但不能对内部类实例进行合成 e g class
  • 无法使用 datastax java 驱动程序通过 UDT 密钥从 cassandra 检索

    我正在尝试使用用户定义的类型作为分区键将对象存储在 cassandra 中 我正在使用 datastax java 驱动程序进行对象映射 虽然我能够插入到数据库中 但无法检索该对象 如果我更改分区键以使用非 udt 例如文本 我就能够保存和
  • 线程池,C++

    我正在使用 C 开发一个网络程序 我想实现一个 pthread 池 每当我从接收套接字接收到一个事件时 我都会将数据放入线程池中的队列中 我正在考虑创建 5 个独立的线程 并将持续检查队列以查看是否有任何传入数据需要完成 这是一个非常简单的
  • 未装饰窗户的 Windows Snap 功能?

    有谁知道如何允许未装饰的窗户使用此功能 唯一的选择就是重新实施它 有任何想法吗 谢谢 可停靠可能是唯一的JToolBar http docs oracle com javase tutorial uiswing components too
  • 将类转换为 JSONObject

    我有好几堂这样的课 我想将类转换为 JSONObject 格式 import java io Serializable import com google gson annotations SerializedName public cla
  • Java AES 256 加密

    我有下面的 java 代码来加密使用 64 个字符密钥的字符串 我的问题是这会是 AES 256 加密吗 String keyString C0BAE23DF8B51807B3E17D21925FADF273A70181E1D81B8EDE
  • JAXB - 忽略元素

    有什么方法可以忽略 Jaxb 解析中的元素吗 我有一个很大的 XML 文件 如果我可以忽略其中一个大而复杂的元素 那么它的解析速度可能会快很多 如果它根本无法验证元素内容并解析文档的其余部分 即使该元素不正确 那就更好了 例如 这应该只生成
  • ThreeTen 向后移植与 JSR-310 的比较

    由于某些原因 我们现在无法使用 java 8 我们仍然停留在 java 7 上 不过 我想使用新的JSR 310 date time APIs现在 使用官方向后移植 ThreeTen http www threeten org threet
  • 如何自定义舍入形式

    我的问题可能看起来很简单 但仍然无法得到有效的东西 我需要自定义 Math round 舍入格式或其他格式以使其工作如下 如果数字是 1 6 他应该四舍五入到 1 如果大于或等于 1 7 他应该四舍五入到 2 0 对于所有其他带有 6 的小
  • IntelliJ Idea:将简单的 Java servlet(无 JSP)部署到 Tomcat 7

    我尝试按照教程进行操作here http wiki jetbrains net intellij Creating a simple Web application and deploying it to Tomcat部署 servlet
  • 如何使用 Jersey 将嵌套列表封送为 JSON?我得到一个空数组或一个包含数组的单元素字典数组

    我正在开发一个使用 Jersey 将对象转换为 JSON 的项目 我希望能够写出嵌套列表 如下所示 data one two three a b c 我想要转换的对象首先将数据表示为 gt gt 我认为 Jersey 会做正确的事情 以上输
  • 文本视图不显示全文

    我正在使用 TableLayout 和 TableRow 创建一个简单的布局 其中包含两个 TextView 这是代码的一部分
  • Lombok 不适用于 Eclipse Neon

    我下载了lombok jar lombok 1 16 14 jar 并将其放入我的下载中 然后我点击这个 jar 执行正确地识别了我的 MacOS 上的 Eclipse 实例 然后我选择了我想要的实例 Lombok也在pom xml中指定
  • 即使禁用安全性,OAuth 令牌 API 也无法在 Elastic Search 中工作

    我是 Elastic search 新手 使用 Elastic search 版本 7 7 1 我想通过以下方式生成 OAuth 令牌弹性搜索文档 https www elastic co guide en elasticsearch re
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • 什么是 Java2D 处理程序线程?

    我创建了一个使用 Hibernate 的示例 java 应用程序 当我进行线程转储时 我观察到一个名为 Java2D Disposer 的奇怪线程 有人能告诉我该线程的功能吗 AWT 系统中的某些实体需要最终确定以释放资源 最突出的例子是j

随机推荐

  • C# - 如何为多级继承层次结构指定泛型类型约束?

    我有以下类层次结构 public class EntityBase
  • Jquery获取表单字段值

    我正在使用 jquery 模板在同一页面上动态生成多个元素 每个元素看起来像这样 div div class something Hello world div div class formdiv div div
  • JScrollPane 无法在空布局中工作

    import javax swing JCheckBox import javax swing JFrame import javax swing JLabel import javax swing JPanel import javax
  • .jcall(cell, "V", "setCellValue", value) 中的错误:尝试 write.xlsx 时未找到带有签名 ([D)V 的 setCellValue 方法

    library dtplyr library xlsx library lubridate data frame 612 obs of 7 variables Company Factor w 10 levels Harbor HCG 6
  • JQuery:委托和日期选择器

    我需要给定类中的每个文本输入都是一个日期选择器 就像是 input type text time datepicker 但我通过 Jquery load 添加了很多代码 所以我相信我需要一个委托 问题是我不知道该怎么做 因为据我所知 加载事
  • Ninject 3.0 MVC kernel.bind 错误自动注册

    kernel Bind 上的获取和错误scanner gt 在 VS 2010 中 scanner 下面有一条小错误线 无法将 lambda 表达式转换为类型 System Type 因为它不是代表 类型 尝试像 2 0 中的旧 kerne
  • Xcode 7:将数组控制器绑定到单选按钮组

    我有一小组对象 用户应该能够使用单选按钮组从中选择一个对象 这些对象已绑定到数组控制器 有没有办法将该阵列控制器绑定到单选按钮组 以便动态生成其他单选按钮 如果可能 首选 IB 解决方案 示例项目 https scriptreactor c
  • 无法为 Kindle Fire HD 安装 ADB

    我正在尝试root它 尽管在我安装了正确的ADB驱动程序之后 当我插入我的Kindle fire HD 7 时 点燃火 gt Android 复合 ADB 接口 没有出现在设备管理器中 因此我无法执行root 我已将 0x1949 添加到
  • Elasticsearch 使用 jest 通过查询删除[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我发现一个有趣的功能叫做通过查询删除 https www elastic co guide en el
  • 如何使用 python 从文本文件的行中读取特定字符?

    我有多个 txt 文件 其中包含与此类似的多行 class1 1 28 9 315 13 354227 2 36 247 17 342 8 34 14 3825 class2 14 31 8679 7 32 3582 2 32 4127 1
  • 组合常见搭配的 NLP 流程

    我有一个语料库 我在 R 中使用 tm 包 并且还在 python 中的 NLTK 中镜像相同的脚本 我正在使用一元组 但希望某种解析器能够将通常位于同一位置的单词组合成一个单词 即 我不想再在我的单词中分别看到 New 和 York 当它
  • Matlab 替换轴范围

    我的 x 轴从 0 到 96 其中每个数字代表一天中的一刻钟 96 4 24 小时 我需要轴来显示 0 到 24 小时 有没有办法在绘图后仅修改轴 您可以使用 gt gt set gca XTick 0 4 96 gt gt set gca
  • 如何将嵌套字典传递给 Flask 的 GET 请求处理程序

    我试图将嵌套字典作为参数传递给 GET 请求 该请求由 Flask 工作线程处理 整个设置是Nginx Gunicorn Flask 在客户端 我正在执行以下操作 import requests def find cabin party P
  • Numpy:了解行名称的 numpy 数组概念

    也许是一个非常模糊的问题 但是挖掘 numpy 上的链接对我没有帮助 我需要使用以下分层聚类对如下所示的二进制数组进行相似度矩阵计算 name val1 val2 val3 val4 val5 comp1 0 0 1 0 1 comp2 1
  • 使用PHP批量删除域共享联系人

    我正在使用 Google API PHP客户端库 v2 1 3 https github com google google api php client 我正在关注以下文档域共享联系人 https developers google co
  • 使 saxon-c 在 Python 中可用

    我刚刚读到 Saxon 现在可用于 Python 这非常有趣而且很好 但是任何人都可以写一篇关于如何使其可用于 Python Anaconda WingIDE 或类似的教程吗 我习惯于使用 pip 或 conda 安装 并指向一个包 轮子以
  • xcode 5 问题:“iOS 模拟器无法安装应用程序”

    我刚刚将我的 xcode 版本升级到 5 0 运行应用程序 2 3 次后 它给我这样的错误 iOS模拟器无法安装应用程序 这在旧的 xcode 中工作正常 当我重置模拟器时 它工作正常 但这一次又一次令人恼火 谁能告诉我真正的问题是什么 我
  • DateTimePicker 显示今天的日期而不是显示其实际值

    我们在表单上的自定义用户控件上有几个 DateTimePicker 它们是可见的 但未启用 仅用于显示目的 当加载 UserControl 时 DateTimePicker 会从来自 DataSet 的 DataRow 分配值 该 Data
  • 什么时候需要在 Ruby C 扩展中声明易失性值?

    我找不到太多关于何时适合声明的文档VALUE as volatileRuby 扩展中以避免过早对正在使用的对象进行垃圾回收 这是我到目前为止所学到的 有人可以填空吗 When volatile does not需要使用 在 C 对象成员中
  • 获取线程的输出

    您认为获取线程工作结果的最佳方式是什么 想象一个线程执行一些计算 如何警告主程序计算已完成 您可以每隔 X 毫秒轮询一些名为 作业完成 的公共变量或顺便说一句 但是您会收到比可用结果更晚的结果 主代码将浪费时间等待它们 另一方面 如果您使用