createTempFile是线程安全的吗?

我正在使用Java 6。

调用createTempFile(类java.io.File)的两个线程是否可能获得相同的临时文件?

获得答案的最佳方法是查看源代码。 起初在createTempFile中没有任何同步,但是为了生成临时文件名,它使用的是SecureRandom,即ThreadSafe。 然后,除非你真的不走运,否则你的文件总会得到一个不同的名字。

最重要的是,createTempFile实现正在循环,生成新文件名,直到创建文件。 当然,文件创建委托给本机文件系统操作,我们可以假设它是线程安全的。

File.createTempFile方法实际上创建了该文件。 线程只返回它单独创建的文件名。 (您可以查看源代码以查看此内容)

存在这种可能性,但它是如此遥远,以至于考虑到它是浪费精力……如果一个应用程序需要担心这种维持其正常运行的可能性,那么我会把它作为一个标志,有一些东西在钓鱼它的设计。