处理文件下载等线程任务中的错误

Jam*_* P. 1 java error-handling multithreading exception-handling

假设我有一个使用线程通过HTTP或FTP下载文件的应用程序.我可以想象在后台出现的一些问题需要一些错误处理:

  • 远程主机变得不可用.
  • 下载速度太慢.
  • 某些数据已损坏(如果检查到位).
  • 没有数据被发送.
  • 内容与预期的文件类型不对应.
  • 报告的大小和数据不一致.
  • ...

如何以将错误传回主应用程序的方式处理这些问题?或者如果不可恢复则中止?

Gra*_*ray 6

这是一个非常普遍的问题,有许多可能的解决方案.它在很大程度上取决于线程当前向主应用程序报告的信息.例如,如果它返回a中的某些远程文件内容Stringnull可能表示数据存在某种问题.如果你想要更具体的信息,那么你需要创建某种JobStatus类来封装你提到的一些错误条件.也许该类还包括远程文件内容或实际工作负载.

在传递信息方面.如果您不使用和线程池,Runnable该类可能有某种getStatus()方法.您还可以将一个类传递给您填写的手头工作,其中可能包含有关遇到的任何错误的信息.Callable<...>ExecutorServiceWorkRequestThread

通常我倾向于依靠日志来显示问题的实际来源和细节,并依赖于抛出的异常Future.get()来回传我的处理线程存在某种问题.但同样,如果没有更多的上下文,很难确定在您的环境中有什么意义.

  • `Future`用于优秀的`ExecutorService`类.请参见:http://www.vogella.com/articles/JavaConcurrency/article.html#threadpools (2认同)
  • 当你有许多小任务要做时,`ExecutorService`线程池最有效.您可以将RSS URL提交给要处理的线程池.对于每个RSS提要,您可以提交一个"Callable",它会传回您的`JobStatus`信息. (2认同)