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:
S

SlaterB

Gast
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?
 

Murray

Top Contributor
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.
 

Generic1

Top Contributor
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
 
S

SlaterB

Gast
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
 

Generic1

Top Contributor
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
 
S

SlaterB

Gast
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 ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Frage zu ThreadLocal Allgemeine Java-Themen 10
S Singleton-Klasse und ThreadLocal-Klasse von abstrakter Klasse ableiten? Allgemeine Java-Themen 2
H ThreadLocal Verständnissproblem Allgemeine Java-Themen 3
I Muster in Array suchen Allgemeine Java-Themen 10
Meeresgott OOP Factory Muster ausbauen Allgemeine Java-Themen 34
M Alles außer Muster in String ersetzen Allgemeine Java-Themen 1
W String Parsen und auf eigenes Muster anwenden (kein Regex) Allgemeine Java-Themen 11
B Muster in 2D-Array finden Allgemeine Java-Themen 4
L Strings nach gleichem Muster ordnen Allgemeine Java-Themen 4
D Sterne Muster mit einer Schleife Allgemeine Java-Themen 5
K ArrayList nach bestimmtem Muster sortieren Allgemeine Java-Themen 3
S Kompositum Muster ohne Exception oder instanceof Operator Allgemeine Java-Themen 6
M RegEx: Muster ersetzen Allgemeine Java-Themen 6
T Muster/Zeichen/Texterkennung auf einem Image Allgemeine Java-Themen 9
G String nach Muster durchsuchen Allgemeine Java-Themen 5
X Bestimmtes Muster in Textdatei verändern Allgemeine Java-Themen 13
K Sequenzdiagramm für Singleton-Muster Allgemeine Java-Themen 5
M Rekursiv Verzeichnisse ansehen und auf Muster matchen Allgemeine Java-Themen 6
W Checkliste Unit Test Allgemeine Java-Themen 17
Y Wieso krieg ich die Unit Tests nicht hin Allgemeine Java-Themen 55
Y Wie sinnvolle unit tests schreiben Allgemeine Java-Themen 29
sascha-sphw Erste Schritte Unit und Integration-Tests im Java Modul System Allgemeine Java-Themen 10
B Frage zu Unit-Tests Allgemeine Java-Themen 6
J Alle Unit Tests in Maven Modul Projekt ausführen Allgemeine Java-Themen 7
looparda Unit Test - Abgänigkeit zur Datenbank isolieren Allgemeine Java-Themen 3
R Unit Test Allgemeine Java-Themen 1
M Für was schreibt man Unit-Tests? Allgemeine Java-Themen 55
P J-Unit vergleich von 2 Objekten merkwürdig Allgemeine Java-Themen 7
K Unit Test consolen ein-/ausgaben. Allgemeine Java-Themen 7
M Html Unit Whitespace-Problem Allgemeine Java-Themen 4
fastjack Unit-Testen mit Mocks Allgemeine Java-Themen 6
Jay_030 Guice: Frage im Umgang mit Unit-Tests Allgemeine Java-Themen 4
B FileWriter / FileReader testen / Mock-Objekt für Unit Tests? Allgemeine Java-Themen 6
S Unit Testing mit JMock Allgemeine Java-Themen 11
alexpetri unit tests für pdfs Allgemeine Java-Themen 4
B J-Unit Tests. Alle Tests eines Package einsammen. Allgemeine Java-Themen 4
tfa Unit-Tests für private Methoden Allgemeine Java-Themen 25
W Unit Tests im "Hauptprojekt" oder in Modulen Allgemeine Java-Themen 3
M Eine Frage über Unit-Tests mit Java Allgemeine Java-Themen 2
N Ausgaben (System.out) umlenken und in Unit-Tests überprüfen? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben