【发布时间】:2014-03-16 16:50:10
【问题描述】:
我读到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) 并执行一些其他操作。之后他们会保存文件。
我需要确保它们不能使用同一个文件,并且保存文件的最后一个线程会覆盖前一个。
【问题讨论】:
-
您的问题令人困惑-您是否希望最后一个线程覆盖文件?
-
我只需要应用一个线程的更改。这意味着我不想有一个文件,其中前半部分由第一个线程创建,后半部分由第二个线程创建。
-
文件是线程安全的,但你提到的文件操作不会使用
File对象,它们也不是线程安全的。 -
但是他们会用什么?
-
你想做什么?
标签: java multithreading java-io