Sind Methoden Threadsicher (Singleton)?

Hallo

bin schon die ganze Zeit am Überlegen ob eine Methode als solche Threadsicher ist. Ich möchte gerne einen Parser schreiben und ich denke es macht keinen Sinn für jeden Parser eine Instanz anzulegen. (Man würde ja auch nicht um z.B. einen Baum zu fällen jedes mal einen eigene Kettensäge erzeugen, oder?)

Nachdem das ganze Multithreades ist würde ich per Singleton bzw. FActory mir einen konfigurierten Parser zurückliefern lassen dessen methode parse() ich dann von n Threads aus aufrufe.

Dabei die erste Frage, wenn ich nur eine Intanz vom Parser habe, werden dadurch die Methodenaufrufe „serialisiert“ sprich hintereinander ausgeführt oder ist es schon so, dass jeder Thread mehr oder weniger gleichzeitig die Methode aufrufen kann und sich so n Threads theoretisch gerade „in“ dieser Methode befinden können?

Die Andere Frage ist, ob das Threadsicher ist, wenn ich in der Parser Klasse selbst keine Klassenvariablen deklariere. ODer gibt es sonst irgendwelche Probleme die euch hierzu einfallen könnten.

Vielen Dank für Hilfe!
Julian

Per se nicht
Hi ho,

per se ist keine Methode threadsafe. Dafür gibts das Schlüsselwort ‚synchronized‘, mit dem kannst Du Methoden oder Codeblöcke synchronisieren.
Dein Singleton Parser könnte also mächtig auf die Schnauze fallen, wenn Du ihn nicht selber threadsafe machst und von mehreren Threads gleichzeitig auf ihn zugreifst. Allerdings baust Du mit einem Singleton Parser einen Flaschenhals in Deinen Code ein, wenn Du schon mehrere Threads am laufen hast. Warum willst Du die ausbremsen? Nimm für jeden Thread einen Parser.

Grüsse,

Herb

Solange die Methode nur auf lokale Variablen zugreift, kann nichts passieren, wenn du aber aus dieser Methode auf gemeinsame Variablen(z.B.: Klassen oder Instanzfelder) schreibend zugreifst, wird es zu Problemen kommen.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]