java - FileDescriptor.sync() 线程安全

标签 java multithreading synchronization file-descriptor

想知道以下场景(简化的 Java 代码):

//Thread A:

FileOutputStream fos = new FileOutputStream(PATH);
OutputStreamWriter osw = new OutputStreamWriter(fos);
BufferedWriter buffW = new BufferedWriter(osw, SIZE);

for (int i = 0; i < ITER; i++) {
    buffW.write(STR);
}

//Thread B:

fos.getFD().sync();

是否需要将 sync() 调用与其他写入同步,或者这是否在操作系统级别得到处理?我的直觉告诉我这应该是操作系统的问题,但我可能是错的。

文档没有涉及这个主题,我只得到一个提示,FileChannel.force(...)正在进行一些同步,这应该是等效的,但是中的场景文档似乎有些不同。

最佳答案

它应该是线程安全的,因为文件描述符是由操作系统管理的。不过,这似乎是一件相当奇怪的事情。

关于java - FileDescriptor.sync() 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22548624/

相关文章:

multithreading - 类成员是否没有缓存行问题?

C++ 线程名称映射和 log4cxx

android - Flutter - Flutter 中是否有类似同步适配器的东西

java - 为什么有人要这样做?

java - 创建类的新对象后获取 NPE

java - Android Studio 导入新模块时项目不会显示在项目结构中

java - 如何在 OpenJDK 中禁用自旋锁同步

java - 如何使用android中的 Intent 打开存储中的特定文件夹

c - Tcl 和 C 线程之间的共享变量

java - 实践中的并发设计原则