ThreadLocal in Muster "Unit of Work"

Generic1

Top Contributor
Hallo,

ich habe eine Frage zu ThreadLocal. Ich verwende das Muster "Unit of Work" und da wird in derm Buch von Matrin Fowler ein ThreadLocal verwendet, ich hab mir auch schon die Java- Doc durchgelesen aber ehrlich gesagt versteh ichs nicht genau.

Java:
class UnitOfWork {

    final ThreadLocal current = new ThreadLocal();
    
    public static void setCurrent() {
         current.set(this);
         }

    public static ThreadLocal getCurrent() {
         return current.get();
         }
    }

Meine Frage wäre jetzt, warum brauch ich da einen ThreadLocal?
Vielen Dank,
lg
 
Zuletzt bearbeitet von einem Moderator:
Thema "String"
ich habe ein großes Programm mit einer Klasse Person, wieso ist da ein Attribut vom Typ String drin?

-----

wieso nennst du dein Thema "ThreadLocal"? ThreadLocal wird an 5320 Stellen in der Welt verwendet,
es geht doch in erster Linie um das Muster "Unit of Work"..,
Thema umbenannt

oder verstehst du allgemein die Funktion von ThreadLocal nicht?
 
Kommt das Beispiel wirklich so im Buch vor? Das kann ich mir nicht vorstellen, denn der Zugriff auf this in einer statischen Methode kann so nicht klappen.
 
OK, tut mir leid, ich habs aus dem Kopf abgetippt, sollte ich vielleicht unterlassen.
so schauts richtig aus:

Java:
class CurrentUnitOfWork... 
	private static ThreadLocal current = new ThreadLocal();
	public static void register(UnitOfWork uow) {
		current.set(uow);
	}
	public static void deregister() {
		current.set(null);
	}
	public static UnitOfWork get() {
		return (UnitOfWork)current.get();
	}

Was mir aber tatsächlich nicht klar ist, für was ich den ThreadLocal da braucht? Ich setze mit ThreadLocal#set(...) die Unit of Work in den ThreadLocal und hole mir mit get() die UnitOfWork aus dem ThreadLocal wieder raus -> für was ich das mache ist mir aber nicht klar?
Vielen Dank,
lg
 
lasse es doch weg wenn du es nicht brauchst,

ThreadLocal bietet wahrscheinlich hier wie überall nur genau das wozu es gut ist (jetzt erkläre ich es doch) :
eine Variable global abzuspeichern, nicht statisch einmalig, sondern je Thread einzeln,
wenn man das nicht braucht sondern Variablen irgendwo anders ablegen kann, dann weglassen, ansonsten nutzen
 
OK, das hab ich jetzt verstanden,
ich biete über einen WebService ein paar Methoden an, wenn ich jetzt vom Client aus eine WS- Methode aufrufe, dann wird wahrscheinlich (meiner Meinung nach - ich glaub, dass es so ist) ein neuer Thread erzeugt.
Heißt das dann auch, dass ich in diesem Thread wieder ein ThreadLocal- Objekt erzeugen müsste, damit dieser aktuelle WS- Methoden- Aufruf- Thread -> ThreadLocal zur Verfügung hätte bzw. müsste ich dann bei jedem WS- Methoden- Aufruf einen neuen ThreadLocal erzeugen!?
lg
 
nicht unbedingt, wie oben zu sehen ist das ThreadLocal-Objekt statisch abgelegt, es existiert nur eins davon,
darin gibt es quasi eine Map<Thread, Object>, für neue Threads muss man nur etwas neues einfügen,

edit:
ob für verschiede Zwecke/ verschiedene WS-Methoden verschiedene ThreadLocal angebracht sind, hängt ganz von Sinn und Aufbau der Programme/ Programmteile ab,
genauso wie man mehrere statische Variablen usw. bracht



so, damit ich nicht auch noch ein drittes Posting mit Inhalt schreibe, den man in einem Lehrbuch nachlesen kann und sollte,
werde ich jetzt nichts mehr schreiben 😉
 

Neue Themen


Zurück
Oben