Es hängt davon ab, was Ihre statische Methode macht. Brauchen Sie wirklich, dass es überhaupt synchronisiert wird? Wird auf den freigegebenen veränderbaren Status zugegriffen?
Wenn ja, werden Sie wahrscheinlich Notwendigkeit tun zu synchronisieren (obwohl ich nicht so einfach mit dem synchronized
Modifikator tun würde - ich eine private static final Variable mit einem Objekt erstellen würde zu erfassen.)
Die Tatsache, dass Ihre Instanzmethode synchronisiert wird, bedeutet, dass keine zwei Threads es mit dem gleichen Zielobjekt ausführen - aber zwei Threads könnten beide m1
mit verschiedenen Zielobjekte ausführen, so m2
könnte zweimal gleichzeitig aufgerufen werden . Ob das ein Problem ist oder nicht, hängt davon ab, was es tut. Wenn kein gemeinsamer Status verwendet wird (z. B. wird nur etwas basierend auf seinen Parametern berechnet), muss es überhaupt nicht synchronisiert werden. Im Allgemeinen ist es für statische Methoden wichtiger, threadsicherer zu sein als Instanzmethoden: I normalerweise nicht machen Sie Typen selbst Thread-sicher, aber stattdessen versuchen, ein paar Klassen verwenden, um Nebenläufigkeit zu verwalten thread mit einem eigenen Satz von separaten Objekten so weit wie möglich.
Ich habe ein bisschen ein Problem mit Ihrem letzten Absatz. Code-Mutationsobjekte, die aus der Statik referenzierbar sind, müssen Thread-sicher sein, obwohl dies normalerweise nicht gemacht werden sollte. Fast alle statischen Methoden sollten die Statik nicht mutieren und müssen daher nicht threadsicher sein. Sie würden beispielsweise 'Collections.sort' nicht threadsicher machen. –
@Tom: Ich würde sagen, dass Collections.sort * automatisch threadsicher ist, vorausgesetzt, Sie übergeben keine Sammlung, die in anderen Threads beobachtet wird. Wenn die statische Methode nicht den globalen Status ändert, ist sie genauso threadsicher wie alles, was in den Status übergeben wurde (falls überhaupt). Wenn es den globalen Status * ändert (oder möglicherweise nur beobachtet), sollten Sie alle erforderlichen Sperren anwenden, um es threadsicher zu machen. –
+1 für die Erwähnung der "statischen" Methode sind anfälliger. – fastcodejava