kevinpan45 2012-09-21 13:50
浏览 1799
已采纳

FutureTask异常捕获问题

如题,我用用FutureTask来监视一个限时任务,但是捕获不到异常,哪位帮忙分析一下。顺便说一下我的功能:我要实现一个流媒体分发的功能,例如同一路视频要分发给不同的用户,流是通过HTTP方式发给客户端,同一路流的所有请求者放在一个LIST里面,如果不限时,当其中一个用户的网路很差的时候就会将列表中其他的用户也堵住,不符合实时流分发的要求,所以要用FutureTask来控制发送时间,如果有哪位兄弟做过类似的东西也可以给我一些意见
1.这是异常
[code="java"]
java.lang.InterruptedException
at java.lang.Object.wait(Native Method)
at org.mortbay.io.nio.SelectChannelEndPoint.blockWritable(SelectChannelE
ndPoint.java:279)
at org.mortbay.jetty.AbstractGenerator$Output.blockForOutput(AbstractGen
erator.java:544)
at org.mortbay.jetty.AbstractGenerator$Output.flush(AbstractGenerator.ja
va:571)
at org.mortbay.jetty.HttpConnection$Output.flush(HttpConnection.java:101
0)
at com.hisome.web.httpplayer.thread.RealCallable.call(RealCallable.java:
22)
at com.hisome.web.httpplayer.thread.RealCallable.call(RealCallable.java:
13)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.
java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:603)
at java.lang.Thread.run(Thread.java:729)
2012-09-21 13:40:14,858 INFO httpplayer.thread.RealCallable -RealCallable write
byte IOException
[/code]
2.这个是RealCallable的类
[code="java"]
public Integer call() throws Exception {
try {
if (res != null && res.getOutputStream() != null) {
res.getOutputStream().write(buffer.array());
res.getOutputStream().flush();
res.flushBuffer();
}
} catch (IOException e) {
if (e instanceof EOFException) {
log.info("RealCallable write byte IOException");
return 1;
}
}
return 0;
}
[/code]
3.这个是我获取Future的结果的方法体
[code="java"]
private void checkTaskResult() {
int res = 0;
String streamId = null;
FutureTask future = null;
taskIter = taskMap.entrySet().iterator();
while (taskIter.hasNext()) {
Entry> ele = taskIter.next();
streamId = ele.getKey();
future = ele.getValue();
try {
res = future.get(10, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
res = 0;
} catch (ExecutionException e) {
res = 0;
} catch (TimeoutException e) {
future.cancel(true);
res = 0;
} catch (CancellationException e) {
res = 0;
}
if (res == 1) {
for (StreamInviter inviter : inviters) {
if (inviter.getStreamId().equals(streamId)) {
inviter.setStatus(false);
}
}
}
}
}
[/code]

  • 写回答

1条回答 默认 最新

  • jinnianshilongnian 2012-09-21 14:23
    关注

    catch (IOException e) {

    if (e instanceof EOFException) {

    log.info("RealCallable write byte IOException");

    return 1;

    }

    }

    需要重新抛出

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作