0

是否有用于读取文件和/或读取超时流的 JDK 5 或更早版本的 API?此外,当包装在 MDB 中时,此 API 必须是安全的。仅供参考:我已经研究过使用 FutureResult、TimedCallable 类等;我得出的结论是,在 MDB 中使用这些是不可取的,因为 1. 这些不是 JDK 原生类,并且 2. 线程是在 MDB 中产生的;所以我需要另一个解决方案。

此外,我相信任何解决方案都需要线程,因为必须有一个读取线程和一个管理读取线程的及时性并在必要时阻止它的线程。因此,这样的行为在 MDB 内部是非法的吗?如果所说的 API 是 JDK 的原生 API,这是否可以安全地实现?

4

1 回答 1

1

正如您从 InputStream API 中看到的那样,没有通用的合同。但是,某些流,例如您从套接字获得的 InputStream,具有超时行为,但这必须在套接字上进行配置。

AFAIK,您可以尝试手动中断读取线程,方法是在其上调用 interrupt(),并希望 Stream 的底层实现在不重新抛出它的情况下不会捕获它(在监视器上使用 wait() 时的常见错误)。然而,这必须在一个额外的线程中完成,或者使用您上面提到的 Future API。如果你捕捉到这个 InterruptedException,并适当地处理它,你应该有一个相当稳定的解决方案。

PS:什么是MDB?我只知道 Microsoft Access 使用的 Microsoft Database 格式的首字母缩写词。

于 2010-12-30T12:11:42.263 回答