0

像这样的类应该在哪里添加 try-with-resources 以便正确关闭资源?我认为应该如图所示重用附加程序,对吗?

public class ChronicleWriter implements UpdateListener {
  private ExcerptAppender appender;
  private SingleChronicleQueue queue;

  public ChronicleWriter(Path p) {
    queue = SingleChronicleQueueBuilder.binary(p).build();
    appender = queue.acquireAppender();
  }

  @Override
  public void onUpdate(String text) {
    appender.writeText(text);
  }
}
4

1 回答 1

0

queue.acquireAppender()call 将从弱引用的线程本地池中获取附加程序,因此几乎没有必要重用它,而且除非您的组件保证仅在单线程中使用,否则它是危险的,因为附加程序不是线程安全的。

我们通常使用的 try-with-resources 模式如下:

try (final DocumentContext dc = queue.acquireAppender().writingDocument()) {
    dc.wire().write("eventName").float32(Float.NaN);
}

此外,您可能希望使您的课程可关闭并添加:

public void close() {
    net.openhft.chronicle.core.io.Closeable.closeQuietly(queue);
}
于 2019-11-05T20:51:37.780 回答