"On one memorable occasion, a manager of one of the external teams told me he had been trying for a year and a half, to tease out the details we had just covered, but we had done it in a day. So what is my secret?"
"To support multiple reentrance with thread local values, you need to keep a stack of previous value. You can use the thread stack, e.g. method(){Context previous = threadLocal.get(); ...; finally {threadLocal.set(previous);}}"