微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Windows上并行写入Java

当同时在同一文件上打开两个(或更多)FileOutputStream时会发生什么?

Java API说:

Some platforms,in particular,allow a file to be opened for writing by only one FileOutputStream (or other file-writing object) at a time.

我猜猜Windows不是这样的一个平台,因为我有两个线程读取一些大文件(每一个不同的文件),然后写入同一个输出文件。没有异常抛出,文件被创建,似乎包含两个输入文件的块。

侧面问题:

>对于Unix来说也是如此吗?
>因为我想要的行为是一样的(实际上我想要一个线程写正确,另一个被警告的冲突),我如何确定该文件已经打开写作?

一个文件有另一个作者时,就没有一种可靠的,跨平台的被动通知方式,即如果一个文件已经打开写入,就会产生异常。然而,有几种技术帮助您积极地检查这一点。

如果多个进程(可以是Java和非Java的混合)可能正在使用该文件,请使用FileLock.成功使用文件锁的一个关键是记住它们只是“咨询”。如果您检查该锁,则保证锁定是可见的,但如果您忘记,则不会阻止您对文件执行任何操作。访问文件的所有进程应设计为使用锁定协议。

如果单个Java进程正在使用该文件,则可以使用Java内置的并发工具来安全地执行此操作。所有线程都需要一个可见的地图,将每个文件名与其相应的锁定实例相关联。可以使用File对象或canonical paths文件轻松调整a related question的答案。该锁对象可能是一个FileOutputStream,一些流包裹,或一个ReentrantReadWriteLock.

原文地址:https://www.jb51.cc/windows/372390.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐