gpt4 book ai didi

java - 检查服务器上是否存在文件并返回该文件内容

转载 作者:行者123 更新时间:2023-12-03 12:59:10 25 4
gpt4 key购买 nike

我想检查该文件在多线程环境上的服务器上是否存在,是否存在该文件的内容请直接返回或从我的s3服务服务器上下载。

我的代码是这样的:

final Object lock = new Object();
File file = new File("/file/path");
if (file.exists()) {
return FileUtils.readFileToByteArray(file);
} else {
byte[] bytes = this.downloadFileFromRemoteServer();
if (!file.exists()) {
synchronized (lock) {
if(!file.exists()) {
FileUtils.writeByteArrayToFile(tempFile, bytes);
}
}
}
tempFile.renameTo(file);
return bytes;
}

上面的代码类似于java的双重检查锁定,方法file.exists()的行为是否像volatile关键字?和伪代码正确吗?

最佳答案

File.exists()检查文件系统中文件的存在,因此它的行为应类似于volatile,因此您可以在这里找到内容。

不过有些问题-

1)一旦线程发现文件不存在,它将立即开始下载文件,这很耗时,因此其他线程也可能会来并开始下载相同的文件。因此,下载部分应移至锁内

2)您正在重命名锁外的临时文件。线程可能会到达这一点而无需创建/写入临时文件。应该将重命名也移入锁中

由于IO具有比锁定更多的开销,因此我认为上述2个步骤将是有益的

关于java - 检查服务器上是否存在文件并返回该文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48224101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com