当前位置: 首页 > 知识库问答 >
问题:

在调用java.lang.AutoCloseable的close方法的情况下,幂等方法意味着什么,副作用是什么?

柯子琪
2023-03-14

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

注意,与Closeable的close()方法不同,此close()方法不要求是幂等的。换句话说,多次调用此close方法可能会产生一些明显的副作用,这与closeable#close()不同,如果多次调用该方法,则要求该方法无效。但是,强烈鼓励该接口的实现者使其闭式方法是幂等的。


他们所说的幂等方法是什么意思,两次调用这个close()方法有什么副作用?

既然interfacecloseable扩展了autocloseable,为什么在关闭closeable接口时看不到副作用呢?

共有1个答案

寿毅庵
2023-03-14

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

所以如果你关闭这个对象一次,它就关闭了,你就没有足够的信息来知道它是不是幂等的。但是,如果您关闭它两次,并且第一次关闭,但是第二次抛出异常,那么它显然不是幂等的。另一方面,如果你关闭它一次,关闭它两次,第二次关闭导致项目以相同的方式保持关闭(也许它是一个noop),那么它是幂等的。

使幂等可闭合的一种技术可以是:

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()被调用一次或多次,则通过isclose()返回的所有状态都将永远返回true。因此,方法close()被认为是幂等的。

 类似资料:
  • 问题内容: java.lang.AutoCloseable的close()方法的Java文档说 请注意,与Closeable方法不同,此方法不需要是 幂等的 。换句话说,多次调用此close方法可能会产生一些可见的副作用, 这与不止一次调用而没有效果的情况不同。但是,强烈建议此接口的实现者使其封闭方法成为幂等。 __ 幂等 方法是什么 意思,两次调用此方法有什么副作用? 而且由于接口扩展,为什么在

  • 我正在读一本关于JPA和EJB的书,上面有一行写着: “单例会话bean可以使用容器管理或bean管理的并发。默认为容器管理,对应于所有业务方法上的写锁。所有业务方法调用都是序列化的,因此在任何给定时间只有一个客户端可以访问bean。同步过程的实际实现由供应商提供。”-具体的。" 序列化方法调用意味着什么?为什么保证在任何给定时间只有一个客户机可以访问bean?

  • 我刚刚浏览了一些代码,我看到了以下方法

  • 我有一个写文件的方法,它可能有点慢。因此,我这样做是为了避免阻止其他操作: 然而,直到在a之后执行B之后,仍然需要一段时间,我想知道是否应该这样做: 或者,换句话说,调用一个内部有线程的方法是否意味着等待该方法结束,从而等待线程结束? 只是为了澄清一些事情:我想知道两个选项是否相同,或者在第一个选项中,线程是否应该完成以启动B指令。

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

  • 问题内容: 我从未见过这样的代码: 一样吗? 编辑 如果该类是继承的,它指向哪个类? 问题答案: 指向其编写所在的类。 因此,如果您的getInstance方法位于类名中,则以下行: 将做与: 编辑:评论后,还有更多信息。 如果您有两个相互扩展的类,则有两种情况: 在子类中定义 在父类中定义 第一种情况看起来像这样(在此示例中,我已经删除了所有不必要的代码-您必须将其重新添加来获得单例行为)*: