新文件(“...”)是否锁定文件?

问题描述 投票:3回答:2

我读到new File("path")没有在磁盘上物理创建文件。虽然在API中有人说:

此类的实例可能表示也可能不表示实际的文件系统对象,例如文件或目录。如果它确实表示这样的对象,则该对象驻留在分区中。分区是文件系统的特定于操作系统的存储部分。单个存储设备(例如,物理磁盘驱动器,闪存,CD-ROM)可以包含多个分区。

所以我很好奇在多线程环境中安装这样的代码是否安全:

File file = new File( "myfile.zip" );
// do some operations with file (fill it with content)
file.saveSomewhere(); // just to denote that I save it after several operations

例如,thread1来到这里,创建一个实例并开始执行操作。同时thread2中断它,创建具有相同名称(myfile.zip)的实例并执行其他操作。之后,他们因此保存文件。

我需要确保它们不能使用相同的文件,保存文件的最后一个线程会覆盖前一个文件。

java multithreading java-io
2个回答
2
投票

不,文件没有锁定,并且对于您描述的模式不安全。您应该将文件锁定或保存在某个包装类中。

如果您提供更多的代码,有人可以帮助您找到合适的模式。


0
投票

当然,您评论的行不是线程安全的,您必须使用互斥锁或监视器来保护它们。黄金法则是:每次你必须在多线程上下文中写东西时,有必要保护该区域以授予线程安全性(Bernstein条件)。

我不确定你提出的陈述是否也需要得到保护,因为我从未使用过那个命令,但我认为这对其他人也有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.