FileOutStream.write(byte [])总是阻塞吗?

Dan*_*iel 1 java io concurrency blocking

我想知道FileOutputStream.write(byte [])是否总是阻塞当前线程,导致ThreadContext开关,或者可能是如果操作系统缓冲区很大,则该操作不会阻止处理字节.

这些想法的原因是,我想知道我在我的应用程序中使用log4j进行的日志记录是否真的是性能损失,并且使用记录消息的队列是否会更快,这些消息由单独的线程读取并写入日志文件(我知道如果应用程序退出并且队列中的语句没有刷新到磁盘,吞没日志记录语句的缺点).

不,我还没有描述它,这些是相当概念性的想法.

Sur*_*ran 5

不必是.

FileOutputStream.write(byte [])是一种本机方法.常识会建议write()可以只写入内部缓冲区,稍后调用flush()实际上会提交它.

  • +1我相信log4j会在每次写入后刷新其消息,因此程序会等待将消息写入磁盘.但是:冲洗总是阻塞吗?操作系统可能只是将缓冲区复制到内部缓冲区并立即返回,将数据异步写入磁盘. (2认同)
  • @Daniel善于思考.但是Outputstreams没有和BufferedOutputStream一样缓冲,所以我认为对flush的调用实际上可能会写入磁盘,除非你使用缓冲版本作为BufferedOutputStream (2认同)