Java 新文件(“…”)是否锁定该文件?

Java 新文件(“…”)是否锁定该文件?,java,multithreading,java-io,Java,Multithreading,Java Io,我读到新文件(“路径”)不会在磁盘上实际创建文件。尽管API中说: 此类的实例可能表示也可能不表示实际的文件系统 对象,例如文件或目录。如果它确实表示这样一个对象,那么该对象驻留在分区中。分区是文件系统特定于操作系统的存储部分。单个存储设备(例如,物理磁盘驱动器、闪存、CD-ROM)可能包含多个分区 所以我很好奇在多线程环境中使用这样的代码是否安全: File file = new File( "myfile.zip" ); // do some operations with file (fi

我读到
新文件(“路径”)
不会在磁盘上实际创建文件。尽管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)创建它的实例,并执行一些其他操作。之后,他们会保存文件


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

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


我不确定您提出的语句是否也需要保护,因为我从未使用过该命令,但我认为这可能对其他人也有帮助。

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


如果您愿意提供更多的代码,肯定会有人帮助您找到合适的模式。

您的问题令人困惑-您是否希望最后一个线程覆盖文件?我只需要应用一个线程中的更改即可。这意味着我不想要一个文件,其中前半部分由第一个线程创建,后半部分由第二个线程创建。该文件是线程安全的,但是您提到的文件操作不会使用
file
对象,并且它们不是线程安全的。但是它们会使用什么?您想做什么?或者我可以给文件指定唯一的名称,比如
file file=new file(“myfile-”+uniqueId+“.zip”),对吗?是的,如果这是一个选项,它肯定是一个简单而安全的解决方案。