Future.get() 总是被 InterruptedException 中断

2023-12-25

我在 Java 中的 Future.get() 遇到了一个奇怪的问题。它总是返回一个 InterruptedException,但奇怪的是异常的原因是 null,所以我不知道是谁打断了我。

情况变得更糟,因为我在调用 get() 之前进行检查,而 Future 要做的工作已经完成。

这是负责下面输出的代码。f 是未来,并且可调用返回一个 HashMap,其中 Agent 并不真正相关。抱歉,如果打印行太多,我只是想提供尽可能多的信息。 callable 的调用方法现在是一个简单的System.out.println("Hola soy agente")正如您将看到的那样,它被打印出来,这意味着可调用对象也没有导致异常

这是代码:

try
    {
        System.out.println(f.isDone());        //true
        System.out.println(f.isCancelled());   //false
        System.out.println(f.toString());      //FutureTask
        newModdedAgents.putAll(f.get());
    }catch(InterruptedException e)
    {
        System.out.println(f.isDone());        //true
        System.out.println(f.isCancelled());   //false
        System.err.println(e);                 //It is an interruptedException
        System.err.println(e.getCause());     //???? null?
        e.printStackTrace();
    }

和输出

 Hola soy agente
 true
 false
 java.util.concurrent.FutureTask@1c4c94e5
 true
 false
 java.lang.InterruptedException
 null

java.lang.InterruptedException
at     java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1302)
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:248)
at java.util.concurrent.FutureTask.get(FutureTask.java:111)
at com.pf.simulator.Simulation.simulateStep(Simulation.java:217)
at com.pf.gui.ButtonPanel.doWork(ButtonPanel.java:141)
at com.pf.gui.ButtonPanel$1$1.construct(ButtonPanel.java:198)
at com.pf.gui.SwingWorker$2.run(SwingWorker.java:117)
at java.lang.Thread.run(Thread.java:636)

如果您想查看我将可调用对象提交到线程池的位置...那么这就是它的代码

    for(Callable<HashMap<Integer, Agent>> c : agentCallables)
    {
        Future<HashMap<Integer,Agent>> future = pool.submit(c);
        agentFutureSet.add(future);
    }

然后我迭代这个集合

    for(Future<HashMap<Integer, Agent>> f : agentFutureSet)
    try
    {
              //Here goes the code at the beginning

你在调用之前检查过线程的中断标志吗get()?你可以这样做Thread.currentThread().isInterrupted().

有关更多信息,请参阅 javadocFuture.get() http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Future.html#get%28%29看看为什么它会抛出 InterruptedException。

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

Future.get() 总是被 InterruptedException 中断 的相关文章

随机推荐

  • 生成 Python AST 的文本表示

    使用 Clang 我们可以做到 clang cc1 ast dump j c TranslationUnitDecl 0x7fbcfc00f608 lt
  • 无法将引导模式窗口作为路线打开

    我正在使用引导程序来显示模式 并希望在单击锚标记时将其显示为路线 但我遇到模块错误并且似乎不知道如何解决它 HTML div div a href profile Click here to open modal a div div JS
  • Windows Speech SAPI:如何列出语音属性?

    我用过这个堆栈溢出答案 https stackoverflow com questions 17675177 c and microsoft sapi 5 how to list all available voices and selec
  • 在 cakephp ssl 站点中重定向到 http 而不是 https

    我开发了一个 cakephp 网站 所有页面都应使用 ssl 它按预期工作 除了当我在控制器中使用重定向时 它重定向到 http subdomain domain com 而不是 https subdomain domain com con
  • SQL 更新行数

    我有一个带有列标识 1590 个值 的表 serviceClusters 然后我有另一个表 serviceClustersNew 其中包含 ID 文本和注释列 在此表中 我有一些文本和注释值 ID 始终为 1 下面是该表的示例 1 虚拟1
  • Postgres 与 Java 我无法插入数据

    我尝试使用 Java 向我的 postgres 数据库插入数据 我的本地数据库有默认配置 我想将一些数据放入表中 但遇到一些问题 这是代码 import java sql Connection import java sql DriverM
  • BindingExpressionBase 在自定义 MarkupExtension 中为 null

    我有一个CustomMarkupExtension班级 绑定正在工作 null 但是BindingExpressionBase总是null 有人可以解释一下为什么吗 我需要得到BindingExpressionBase打电话给UpdateT
  • 我可以为 html 元素设置默认的 css 类吗

    如果我定义了一个 css 类 是否可以将该类设置为 html 元素的默认类 为了澄清这一点 我希望分解出类的定义 以便它可以被一个或多个 css 选择器使用 或者在 html 中谨慎应用 例如 myclass float right h1
  • Actionscript 3.0:范围

    教程通常不涉及 Actionscript 中的范围 您能给我指出一些文档和 或解释一下我应该了解什么吗 我想避免由于某些类在某些地方不可见而引起的问题 这些应该有帮助 功能范围 http livedocs adobe com flex 3
  • 调整应用程序窗口大小时,如何调整应用程序内的图像大小?

    当我最大化应用程序时 JPanel 内的图像不会随之调整大小 如何在窗口最大化时调整 JPanel 及其内容 编辑 我正在使用 BufferedImage 这是一个开放式问题 您想要缩放以填充或缩放以适合区域还是您不关心纵横比 填充比例和适
  • South 忽略 Python / Django 中字段默认值的更改

    为什么 South 无法识别 Python 模型中默认字段值的更改 例如 以向南迁移的现有模型为例 class MyFamily models Model family size models IntegerField verbose na
  • Phonegap 谷歌分析根本不跟踪

    这是我的 main js 文件 Google Analytics function var ga document createElement script ga type text javascript ga async true ga
  • 在运行时更改 DataGridView 标题文本

    我能够在运行时更改所有控件文本 预计我的 DataGridViews 标题文本不会更改 colName HeaderText FormOtherRes Crc I tried DataGridView1 Refresh 但这没有用 当我调试
  • 不在数据构造函数范围内

    我有两个 hs 文件 一个包含新类型声明 另一个使用它 首先 hs module first where type S SetType data SetType S Integer 第二个 hs module second where im
  • 维基百科是否允许通过 Google App Engine 获取 URL?

    我正在编写一个 Python Web 应用程序 我计划在其中利用维基百科 当尝试一些 URL 获取代码时 我能够获取 Google 和 Facebook 通过 Google App Engine 服务 但是当我尝试获取 wikipedia
  • 从 XML 中选择节点,其属性之一包含特定字符串

    我试图选择在其属性之一中包含给定字符串的节点 但似乎我只能在某个属性上执行此操作 var tempUsers xmlDocument selectNodes Users contains Id TEXT 我想我可以写一些其他的东西来代替 I
  • java web start 应用程序可以在没有 .jnlp 文件的情况下存在吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 正如中所解释的Java网络启动 ht
  • jQuery 模糊() 不起作用?

    这里完全被难住了 尝试一些很简单的事情 但它不起作用 input input1 textarea input1 focus function this addClass input2 removeClass input1 input inp
  • canvasContext.fillRect 在 Firefox 中抛出 NS_ERROR_FAILURE 异常

    我试图在页面顶部绘制一个巨大的画布矩形 某种灯箱背景 代码非常简单 var el document createElement canvas el style position absolute el style top 0 el styl
  • Future.get() 总是被 InterruptedException 中断

    我在 Java 中的 Future get 遇到了一个奇怪的问题 它总是返回一个 InterruptedException 但奇怪的是异常的原因是 null 所以我不知道是谁打断了我 情况变得更糟 因为我在调用 get 之前进行检查 而 F