Java如何同步文件写入实现线程间最大并发

new*_*Cpp 2 java synchronization locking file

我有 10 个文本文件,用于存储记录。在我的应用程序中,我有几个操作,例如写入文件和编辑文件(如果找到指定的行,我创建一个临时文件并将所有信息传输到那里,然后删除旧文件并重命名临时文件)。

我的所有客户都可以访问 10 个文本文件,因此我希望同步他们的活动以保持数据一致性。

如果客户端正在编辑或写入,我想锁定或同步文件,比如 f1.txt,这样其他人就不能写入/编辑它,并通过让另一个客户端同时编辑 f2.txt 来增加并发性。

public void writeToFile(String pathname){
File f1 = new File(pathname)
synchronize (f1) {.. // do something}
}
Run Code Online (Sandbox Code Playgroud)

我的问题是每次都使用特定路径创建一个新文件。

请我将不胜感激任何指导和帮助,你是这样的。

谢谢

Cha*_*the 6

如果我理解正确,您希望在特定文件路径上进行同步(并且文件系统没有以您喜欢的方式强制执行此操作)。你是正确的File对象将无法工作。你需要同步的是什么名字的文件。

public void writeToFile(String pathname){
File f1 = new File(pathname)
synchronize (f1.getCanonicalPath().intern()) {.. // do something}
}
Run Code Online (Sandbox Code Playgroud)

getCanonicalPath方法将为引用相同路径的String任何两个File对象返回相同的值。例如,如果../logs/mylog.txt/var/spool/logs/mylog.txt是同一个文件,它们将具有相同的规范路径。

intern方法返回相同的参考任何两个String对象具有相同的value。因此,您最终锁定的是文件规范路径的单例实例。

我认为这可以满足您的需求。