Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在try-catch-finally块中调用异步方法_Java_Android_Asynchronous_Try Catch - Fatal编程技术网

Java 在try-catch-finally块中调用异步方法

Java 在try-catch-finally块中调用异步方法,java,android,asynchronous,try-catch,Java,Android,Asynchronous,Try Catch,我想了解以下内容,假设我有以下代码块: try{ // do something asynchronousMethodCallThatWritesFileOutputStreamToSocket(fileOutputStream); }catch (SomeException e){ //handle exception }finally{ closeFileOutputStream(fileOutputStream); } 我的问题是,在异步方法完成之前,最终

我想了解以下内容,假设我有以下代码块:

try{
    // do something
    asynchronousMethodCallThatWritesFileOutputStreamToSocket(fileOutputStream);
}catch (SomeException e){
    //handle exception
}finally{
    closeFileOutputStream(fileOutputStream);
}
我的问题是,在异步方法完成之前,最终是否会阻止关闭流?还是它会以某种方式等待?如果你知道的话,请把书上的任何引语都写下来。多谢各位


注意,这是伪代码,我知道尝试使用资源模式

程序退出时总是出现未捕获的异常,因为未正确捕获异步函数

基于

唯一的问题是它们(异常,ndr)可能发生在程序中的任何位置, 因此,可靠地捕捉它们是很困难的。你基本上得把它包起来 所有线程的
run
方法和
try..catch中的
main
方法 块,但对于不控制的线程(如 Swing EDT或计时器线程等)


它至少会尝试关闭。使用异步调用的要点是不要等待它完成。因此,您应该在异步调用或“完成”回调中关闭资源。顺便说一句:你可以很容易地发现…嗯,我希望在写入线程或试图关闭文件的线程中抛出异常。注意尝试/捕获会悄悄吞噬异常。。。但是预测是困难的,因为异步调用的执行速度仍然可能足够快(尽管不太可能),以便在完成后完成关闭。从逻辑上讲,异步方法应该关闭流。在进行异步调用的地方不应该关闭它为什么不直接测试它而不是尝试预测?如果我设计了这个,我只会给出路径,并在异步调用中打开/关闭文件流。