Thread Safe Zeit Messung

Status
Nicht offen für weitere Antworten.

kama

Top Contributor
Hallo,

ich habe mich mal ganz einfach dran gemacht mir eine Klasse zu schreiben, mit der ich einfach Zeitmessungen machen kann ...nichts besonders...

Code:
   TimeMeasure.start("marke");
   ....
   TimeMeasure.stop("marke");
   ...
   TimeMeasure.result();

Das Ganze ist mithilfe von einem HashMap realisert, der per String (Parameter start/stop) entsprechend dann System.currentMillis aufruft. etc.
Im result() werden dann alle Schlüssel mit den entsprechenden Werten mehr oder minder schön ausgegeben.

Das klappt auch wunderbar.

Nur wenn ich das Ganze jetzt mit im Rahmen eines Test mit unterschiedlichen Threads einsetzte falle ich auf die Nase....
sprich das "result()" wird von Thread 1 aufgerufen und löscht somit die Infos von z.B. Thread 2.


Jetzt die spannende Frage:

Wie kriegt man das Thread - Safe, dass es auch mit unterschiedlichen Threads sauber läuft...

Muss ich mit tatsächlich so Sachen wie Thread.getId() und/oder Thread.getName() als weiteres Unterscheidungskriterium heranziehen?

Oder gibt es etwas geschickteres?


Vielen Dank im Voraus.
MfG
Karl Heinz Marbaise
 
beide threads verwenden also die gleiche id für start() und stop() ?
kannst du nich die api einfach nicht-statisch machen und für jeden thread eine neue TimeMeasure instanz instantiieren?,
oder innerhalb von TimeMeasure die HashMap als ThreadLocal verwalten, dann hast du automatisch für jeden thread ne eigne map.
 
Hallo Roar,

Roar hat gesagt.:
beide threads verwenden also die gleiche id für start() und stop() ?
Ja exakt.

Roar hat gesagt.:
kannst du nich die api einfach nicht-statisch machen und für jeden thread eine neue TimeMeasure instanz instantiieren?,
Könnte ich schon, dazu müsste ich dann aber immer genau wissen wieviele Threads gestartet werden.
Ziel ist es halt, das so zu lösen, dass das nicht notwendig und ich Mein TimeMeasure einfach in vorhanden Code einsetzten OHNE mir den Kopf zu zerbrechen, wieviele Threads jetzt kommen oder nicht...

Roar hat gesagt.:
oder innerhalb von TimeMeasure die HashMap als ThreadLocal verwalten, dann hast du automatisch für jeden thread ne eigne map.
ThreadLocal habe ich gerade mal kurz überflogen....das würde dann das Problem lösen...

Vielen Dank für den Hinweis....

Werde ich mir noch genauer anschauen....

MfG
Karl Heinz Marbaise
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben