java interruput_java – Future.get()总是被InterruptedException中断

我在

Java中遇到了Future.get()的WEIRD问题.它总是返回一个InterruptedException,但奇怪的是,Exception的原因是null,所以我不能告诉谁打断了我..

它变得更糟,因为我在调用get()之前检查,而Future必须完成的工作已经完成.

以下是负责输出的代码. f是Future,而callable返回一个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> c : agentCallables)

{

Future> future = pool.submit(c);

agentFutureSet.add(future);

}

然后我迭代这个Set

for(Future> f : agentFutureSet)

try

{

//Here goes the code at the beginning

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值