当前位置: 首页 > 面试题库 >

幂等方法是什么意思,在调用java.lang.AutoCloseable的close方法的情况下会有哪些副作用?

淳于博
2023-03-14
问题内容

java.lang.AutoCloseable的close()方法的Java文档说

请注意,与Closeableclose()方法不同,此方法不需要是
幂等的 。换句话说,多次调用此close方法可能会产生一些可见的副作用,
这与不止一次调用而没有效果的情况不同。但是,强烈建议此接口的实现者使其封闭方法成为幂等。close()
__Closeable#close()

幂等 方法是什么 意思,close()两次调用此方法有什么副作用?

而且由于接口Closeable扩展,AutoCloseable为什么在Closeable接口关闭时看不到副作用?


问题答案:

幂等意味着您可以多次应用该操作,但是一个调用的结果状态与多个调用的结果状态是无法区分的。简而言之,多次调用该方法是安全的。实际上,第二个和第三个(依此类推)调用对程序状态没有可见的影响。

因此,如果您一次关闭此对象并将其关闭,则您将没有足够的信息来知道它是否是幂等的。但是,如果将它关闭两次,第一次关闭,但是第二次抛出异常,则显然不是幂等的。另一方面,如果您将其关闭一次,然后将其关闭两次,并且第二次关闭导致该项目以相同的方式保持关闭状态(也许是noop),则它是幂等的。

制作幂等的一种技术Closeable可能是:

public class Example implements Closeable {

  private boolean closed;

  public Example() {
    closed = false;
  }

  public void close() {
    if (!isClosed()) {
      closed = true;
    }
  }

  public boolean isClosed() {
    return closed;
  }
}

现在很明显,如果close()调用一次或多次,则状态的所有返回isClosed()将永远返回true。因此,该方法close()将被视为幂等的。



 类似资料:
  • Java.lang.AutoCloseable的close()方法的Java文档说 注意,与Closeable的方法不同,此方法不要求是幂等的。换句话说,多次调用此close方法可能会产生一些明显的副作用,这与不同,如果多次调用该方法,则要求该方法无效。但是,强烈鼓励该接口的实现者使其闭式方法是幂等的。 他们所说的幂等方法是什么意思,两次调用这个方法有什么副作用? 既然interface扩展了,为

  • 问题内容: 我遇到了这段代码,我不退出这一行来理解它的含义或它在做什么。 我知道是什么还是什么,但是什么是? 问题答案: 这是构造函数重载: 您可以通过缺少返回类型来判断此代码​​是构造函数,而不是方法。这与在构造函数的第一行中调用以初始化扩展类非常相似。您应该在构造函数的第一行中调用(或的任何其他重载),从而避免构造函数代码重复。 您也可以看看这篇文章:Java中的构造方法重载-最佳实践

  • 这是一个使用合并排序的程序,从1到1000对1000个数字的列表进行排序。它显示原始列表,然后调用递归方法对其进行排序,然后显示。 代码中我不明白的是这两行: 合并排序(数字,低,中);//在方法中,它会说“这里” 合并排序(数字,中间1,高); 我是java的初学者,这与我所学的一切背道而驰,因为我无法理解如何在方法中调用方法。除非它是一个我怀疑的对象。有人能解释一下这两行代码的作用吗?

  • 那么当我使用调用异步方法时会发生什么呢?整个方法的操作会以同步的方式完成吗?例如,如上面所示,我在中有三个异步操作;、&,那么它们是否会以同步方式执行,因为我使用.wait()调用ScanAsync方法?

  • 如果我有一个长时间运行的 方法,我在 操作方法中调用它而不等待它,是否保证即使从操作方法返回之后它也会完成? 示例: 编辑: 在谷歌搜索时,我确实发现了如何在C#中安全调用异步方法而无需等待,但我想知道是否有人能具体说明一下ASP.NET MVC。当仔细查看问题中的所有答案时,以下答案/链接中有一些信息:https://stackoverflow.com/a/15523793/585968,如@m

  • 问题内容: 我已阅读以下讨论: 如果私有帮助器方法可以是静态的,则它们应该是静态的;如果它们的类没有成员变量,则所有方法应该是静态的。 似乎人们通常会接受静态方法,但由于以下两个原因,对此有些怀疑: 他们很难测试。 他们违反了OO原则。(一个人说,它们是函数,而不是方法。) 最可接受的静态方法是 私有静态 方法。但是,为什么为什么根本不存在静态方法呢?在什么情况下,它们是最优先采用的方法? 问题答