2011-01-15 18 views
4

Ich verwende Java 6.Ist createTempFile Thread-sicher?

Ist es möglich, dass zwei Threads, die createTempFile (der Klasse java.io.File) aufrufen, die gleiche temporäre Datei erhalten?

+2

Möglich, ja. Wahrscheinlich - nein, mit ziemlicher Sicherheit nicht. – skaffman

Antwort

15

Der beste Weg, um Ihre Antwort zu bekommen, ist es, den Quellcode zu sehen. Zuerst gibt es keine Synchronisation in createTempFile, aber um den temporären Dateinamen zu generieren, benutzt er SecureRandom, was ThreadSafe ist. Dann, wenn Sie wirklich Pech haben, wird Ihre Datei immer einen anderen Namen bekommen.

Darüber hinaus ist die createTempFile-Implementierung Schleifenbildung und generiert einen neuen Dateinamen, bis die Datei erstellt wurde. Die Dateierstellung ist natürlich an den nativen Dateisystembetrieb delegiert, den wir vielleicht für threadsicher halten.

2

Die Methode File.createTempFile erstellt die Datei tatsächlich. Ein Thread gibt nur einen Dateinamen zurück, den er alleine erstellt hat. (Sie können den Quellcode überprüfen, um dies zu sehen)

0

Die Möglichkeit existiert, aber es ist so weit entfernt, dass es eine Verschwendung von Aufwand ist ... und wenn eine Anwendung benötigt wird um sich über diese Möglichkeit zu sorgen, um sein korrektes Funktionieren aufrechtzuerhalten, würde ich das als ein Zeichen nehmen, dass mit seinem Design etwas angeln ist.