根据这个问题 ,小的文件附加在Windows上是原子。
我想利用这个斯卡拉/ Java的,以避免附加一个小的int文件时锁定。
我发现写入使用FileOutputStream(..., true)
从多个线程被交错,尽管上面链接的问题,建议他们应该是原子的。
测试工具为这个Scala中可以发现在我的github
关键代码如下:
def invoked(id: Int, path: String) = {
val writer = new FileOutputStream(path, true)
val bytes = (id.toString + ';').getBytes(Charset.defaultCharset())
writer.write(bytes)
writer.close()
}
......我希望“援引”将是线程安全的无锁。
相同的Java / Scala代码实现了原子文件附加在Linux上(按照这一问题的小文件附加上POSIX原子),这样的差异似乎是在本地实现FileOutputStream
。
也许FileOutputStream
没有传递正确的标志到Windows? 有谁知道如何使这项工作? 我会写一个JNI DLL得到这个工作,还是有办法可以用Java的标准库做到这一点?