Sind Java-Arrays in einer statischen Methode threadsicher?

8
%Vor%

Die obige statische Methode führt eine binäre Suche aus. Ist es threadsicher? Ich weiß, dass lokale Variablen Thread-sicher sind, aber "a" ist hier ein Array, also bedeutet es, dass es ein Objekt in Java ist, oder? Ist das ein Problem? Das Array wird gerade gelesen, in keiner Weise verändert, also gehe ich davon aus, dass diese Methode Thread-sicher ist. Aber ich möchte sicherstellen, dass ich verstehe warum.

Danke!

    
user247866 04.11.2011, 21:13
quelle

3 Antworten

7

Keine Arrays sind im Allgemeinen nicht sicher. Ob Ihr Code in diesem Fall verwendet wird, hängt davon ab, ob andere Threads Zugriff auf das übergebene Array haben. Da Arrays als Referenz übergeben werden, können andere Threads darauf zugreifen.

Wenn Sie das Array nur in einem einzelnen Thread erstellen / ändern oder wenn Sie eine kopiergeschützte Kopie übergeben, ist es in Ordnung.

    
Dean Povey 04.11.2011, 21:20
quelle
1

Die Methode selbst ist threadsicher, da sie nur ihre Argumente entgegennimmt und sie liest, ohne sie in einem anderen Thread zu veröffentlichen. Aber das bedeutet nicht, dass Sie kein Threading-Problem haben könnten. Alles hängt davon ab, woher die Argumente kommen.

Wenn die Argumente einen gemeinsamen Status zwischen Threads darstellen, sollte jeder Zugriff auf diesen Zustand irgendwie synchronisiert werden. Sie müssen jedoch eine Synchronisierungsrichtlinie zwischen Threads einrichten, um den Zugriff auf diesen Status zu schützen. Daher sollte diese Methode oder der Aufrufer dieser Methode sicherstellen, dass der Zugriff auf den Status Thread-sicher ist. Ohne zu wissen, wo die Argumente herkommen, ist es unmöglich zu sagen, ob dieser Code Thread-sicher ist oder nicht.

    
JB Nizet 04.11.2011 21:28
quelle
0

Ja, es ist Thread-sicher, da Sie sagen, dass Sie nur das Array lesen, das einzige mögliche Problem kann sein, wenn ein anderer Thread das Array zur gleichen Zeit aktualisiert, wie diese Methode es liest

    
Peter Szanto 04.11.2011 21:15
quelle