juste une petite remarque : rien n'oblige à utilise ThreadLocal, on peut stocker des attributs dans un "objet qui représente le thread", selon la vieille recette.
toujours le même bout de code en exemple (je vais écrire une thèse de doctorat sur ces 400 lignes) :
http://forum.hardware.fr/hardwaref [...] tm#t812250
ligne 282, la classe Executor est un "Thread amélioré".
ligne 336 getCurrentTask() est un accesseur sur une variable privée du Thread amélioré.
BIen entendu, on privilégiera cette méthode dans le cas général et on utilisera ThreadLocal quand on doit s'accrocher à du code non modifiable.