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

时间:2016-01-29 19:59:02

标签: java multithreading

我有一个异步资源,我想让它可以自动关闭。我的资源旋转一个线程并轮询内部读者。

我应该阻止关闭方法,直到内部资源关闭或没问题。

我的代码是这样的......

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()
   }
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

Ẃ这个规则可能有合理的例外,我会说一般你应该阻止close()

基本原理: AutoCloseable' s close()建议抛出一般的异常。虽然没有义务抛出这样的例外(现在你没有这样做),但你基本上禁止自己在将来改变它。通过使close()的内部逻辑异步,您无法真正传递关闭资源时可能发生的任何错误行为。