首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在操作完成之前,Flushable.flush()的一般行为是否会被阻塞?

在操作完成之前,Flushable.flush()的一般行为是否会被阻塞?
EN

Stack Overflow用户
提问于 2016-03-22 05:25:26
回答 1查看 679关注 0票数 2

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

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

也就是说,当调用者调用flush()方法时,它将开始在另一个线程中执行其操作,而flush()方法只是返回。

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

我想通过设置flush()调用块来修复它,直到所有操作都完成为止。

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

API Doc:

通过将任何缓冲的输出写入基础流来刷新此流。

API Doc:

刷新此输出流,并强制写入任何缓冲的输出字节。刷新的一般约定是,调用它是一种指示,如果以前写入的任何字节被输出流的实现所缓冲,这些字节应该立即被写入它们的预期目的地。 如果此流的预定目标是底层操作系统(例如文件)提供的抽象,则刷新流只保证将先前写入流的字节传递给操作系统进行写入;它不能保证它们实际上被写入物理设备(例如磁盘驱动器)。 OutputStream的刷新方法不起任何作用。

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

但是,对于flush()的一般理解是什么,它应该是阻塞调用还是非阻塞调用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-22 05:54:33

API文档没有指定这样的契约。

是的,确实如此。

Javadoc的引用都来自于OutputStream家族,它本质上阻碍了所有操作。如果异步执行,则不能“保证以前写入流的字节被刷新”。

解决办法:不要。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36146741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档