有没有办法取消长时间运行的文件打开操作?由于反病毒扫描,映射网络驱动器等导致长时间延迟。
new FileInputStream("a_file_that_the_antivirus_" +
"will_process_for_minutes_before_returning.jar")
// process the contents...
在上面的例子中,第一行可以阻塞,但我不知道以任何方式异步取消该操作(如果我们得到了新的输入流对象,取消就像in.close()一样简单,但是这个问题不是那种情况)。
是否可以中断打开过程 - 也许是使用NIO - 或者是否已经有一个机制如简单的Thread.interrupt()来取消打开?
操作系统:主要是Windows XP +,Java 6+,阻塞通常是由于一些更大更深的jar文件 - 例如,Eclipse的插件或我自己的复杂应用程序。
答案 0 :(得分:1)
假设没有解决方案(我找不到解决方案,我怀疑我们遇到了操作系统级别的调用)实际在工作线程中进行打开尝试会有多糟糕,并最终超时等待那个线程。然后你可以继续进行主处理,而在backgrounbd中,工作线程最终会完全打开它,但会立即再次关闭文件 - 没有人再等了。
是的,它会占用FD资源,但可能不是大数字 - 无论如何,你可以限制工作线程的数量来控制影响。
答案 1 :(得分:0)
fileinputstream正在阻止。您可能需要查看Asynchronous File I/O in Java或java nio