繁体   English   中英

我应该在Java中阻止异步AutoClosable资源的close方法吗?

[英]Should I block on close method of an asynchronous AutoClosable resource in Java?

我有一个异步资源,我想使其自动关闭。 我的资源产生了一个线程并轮询内部读取器。

我应该阻塞关闭方法,直到内部资源关闭还是可以。

我的代码是这样的...

public class MyReader implements AutoClosable {
   ActualReader readerImpl = ...;

   public void close() {
     shutdownRequested.set(true);
   }

   public void start() {
     while(!shutdownRequested) { 
       int someInt = readerImpl.poll(100); 
     }

     readerImpl.close()
   }
}

您的资源应该是异步的。 因此,该方法不应阻塞。

this尽管此规则可能有合理的例外,但我要说的是,通常应该在close()上进行阻塞。

基本原理: AutoCloseable的close()建议抛出通用异常。 尽管没有义务抛出这样的Exception(现在您没有这样做),但是实际上您在禁止自己将来改变它。 通过使close()的内部逻辑异步,您实际上无法传递关闭资源时可能发生的任何不当行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM