Java IO 线程安全

标签 java multithreading concurrency io bytebuffer

我使用MappedByteBuffers通过 volatile 变量实现文件的读取器和写入器之间的线程安全(写入器更新位置,读取器读取写入器的位置)(这是一个文件上传系统,传入的文件是一个流,如果有的话)。显然还有更多技巧(稀疏文件、两次映射增长的幂),但这一切都归结为这一点。

我找不到一种更快的方法来写入文件,同时读取相同的文件,而无需将相同的文件完全缓存在内存中(由于剪切大小,我无法做到这一点)。

是否有任何其他 IO 方法可以保证同一进程中读取器对写入字节的可见性? MappedByteBuffer 通过 Java 内存模型间接做出保证,我希望任何其他解决方案也能做同样的事情(阅读:非特定于平台等等)。

这是最快的方法吗?我在文档中遗漏了什么吗?

最佳答案

几年前,我在当时相当不错的硬件上做了一些测试,MappedByteBuffer 比任何其他 I/O 技术快大约 20%。它的缺点是写入时需要提前知道文件大小。

关于Java IO 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17034844/

相关文章:

java - JPA:回滚后刷新分离的实体并重新附加它

Java 在新终端 (mac osx) 中开始运行命令 - 进程生成器未正确运行 osascript

java - 右键单击 javaFX 中的 Pane 或 ImageView 时如何显示上下文菜单

java - 将没有特定标准结构的 JSON 解析为 Map 或 Java 对象

java - 我们什么时候在处理 'GET' 的 java 方法上使用 Synchronized ?

java - 在 Java (Spring) 中使用线程 ID 避免竞争条件?

c++ - 访问线程内的主对话框变量 (MFC)

c - 了解发布顺序并在 C11 中同步

concurrency - 并发算法思考并在 Go 中学习

java - 处理现实世界中银行交易的并发请求