我读到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)并执行其他操作。之后,他们因此保存文件。
我需要确保它们不能使用同一个文件,保存文件的最后一个线程会覆盖前一个文件。
答案 0 :(得分:2)
不,文件没有锁定,对您描述的模式不安全。您应该将文件锁定或保存在某个包装类中。
如果您要提供更多代码,有人可以帮助您找到合适的模式。
答案 1 :(得分:0)
当然,您评论的行不是线程安全的,您必须使用互斥锁或监视器来保护它们。黄金规则是:每次你必须在多线程上下文中写一些内容时,有必要保护该区域以授予线程安全性(Bernstein条件)。
我不确定你提出的陈述是否也需要受到保护,因为我从未使用过该命令,但我认为这对其他人也有帮助。