gpt4 book ai didi

java - Flushable.flush() 的一般行为是阻塞直到操作完成吗?

转载 作者:行者123 更新时间:2023-11-30 03:00:25 25 4
gpt4 key购买 nike

我们有一个库可以缓冲其操作以提高性能。调用者可以调用flush()方法强制它开始执行操作。

但现在,flush()方法的实现方式是,它开始异步执行其操作。

即,当调用者调用 flush() 时方法,它将开始在不同的线程中执行操作,并且 flush()方法只是返回。

这样,调用者在调用 close() 之前并不知道操作是否完成(他们必须通过检查操作结果来确定)。方法。

我想通过制作 flush() 来修复它调用 block 直到所有操作完成。

在此之前,我想确保 flush()方法应该阻塞。但 API 文档并没有指定这样的合约。

Flushable.flush() API Doc:

Flushes this stream by writing any buffered output to the underlying stream.

OutputStream.flush() API Doc:

Flushes this output stream and forces any buffered output bytes to be written out. The general contract of flush is that calling it is an indication that, if any bytes previously written have been buffered by the implementation of the output stream, such bytes should immediately be written to their intended destination.

If the intended destination of this stream is an abstraction provided by the underlying operating system, for example a file, then flushing the stream guarantees only that bytes previously written to the stream are passed to the operating system for writing; it does not guarantee that they are actually written to a physical device such as a disk drive.

The flush method of OutputStream does nothing.

两个文档都没有指定有关在输出写入或未写入之前阻塞的任何内容。

但是flush()的一般理解是什么? ,这是否应该是一个阻塞调用?

最佳答案

the API documentation doesn't specify a contract like that.

是的。

两个 Javadoc 引用都来自 OutputStream 系列,它本质上对所有操作都是阻塞的。如果您异步执行此操作,则无法“保证先前写入流的字节被刷新”。

解决方案:不要。

关于java - Flushable.flush() 的一般行为是阻塞直到操作完成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36146741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com