繁体   English   中英

Java临时文件多线程应用程序

[英]Java Temporary File Multithreaded Application

我正在寻找一种简单的方法来生成一个临时文件,该文件在每个JVM的基础上总是以一个唯一的名称结束。 基本上我想确保在多线程应用程序中,如果两个或多个线程试图在完全相同的时刻创建一个临时文件,它们将最终得到一个唯一的临时文件,并且不会抛出任何异常。

这是我目前的方法:

public File createTempFile(InputStream inputStream) throws FileUtilsException {
    File tempFile = null;
    OutputStream outputStream = null;
    try {
        tempFile = File.createTempFile("app", ".tmp");
        tempFile.deleteOnExit();
        outputStream = new FileOutputStream(tempFile);
        IOUtils.copy(inputStream, outputStream);
    } catch (IOException e) {
        logger.debug("Unable to create temp file", e);
        throw new FileUtilsException(e);
    } finally {
        try { if (outputStream != null) outputStream.close(); } catch (Exception e) {}
        try { if (inputStream != null) inputStream.close(); } catch (Exception e) {}
    }
    return tempFile;
}

这对我的目标是完全安全的吗? 我查看了以下网址的文档,但我不确定。

请参见java.io.File #createTempFile

以下网址上发布的答案回答了我的问题。 我发布的方法在多线程单JVM进程环境中是安全的。 为了使其在多线程多JVM进程环境(例如集群Web应用程序)中安全,您可以使用Chris Cooper的想法,该想法涉及在每个JVM进程中的File.createTempFile方法的prefix参数中传递唯一值。

createTempFile是线程安全的吗?

只需使用毫秒的线程名称和当前时间来命名文件。

出于此确切原因,您可以为临时文件提供不同的前缀或后缀。 为每个启动的进程分配一个唯一的ID,并使用该唯一的id作为前缀或后缀,同一个VM中的多个线程不会发生冲突,现在VM也不会发生冲突。

暂无
暂无

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

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