繁体   English   中英

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

[英]How to synchronize file writing to achieve maximum concurrency between threads Java

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

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

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

public void writeToFile(String pathname){
File f1 = new File(pathname)
synchronize (f1) {.. // do something}
}

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

我很感激你的任何指导和帮助。

谢谢

如果我理解正确,您希望在特定文件路径上进行同步(并且文件系统不会以您喜欢的方式强制执行此操作)。 你是对的, File对象不起作用。 您需要同步的是文件的名称

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

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

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

我认为这符合您的需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM