The
private static ThreadLocal<String> CONTEXT = new ThreadLocal<>();
создать локальную переменную потока. Это означает, что то, что вы помещаете внутрь, привязано к определенному потоку, и когда вы получаете что-то, это то, что в этом потоке возвращается.
Например, в потоке 1 вы устанавливаете:
CONTEXT.set(1);
в теме 2, которую вы установили:
CONTEXT.set(2);
и более поздние нити печатают то, что внутри с
CONTEXT.get();
будет напечатано 1
для потока 1 и 2
для потока 2.
Так что теперь, если вы используете стандартную синхронную модель, это нормально, если вы не забудете очистить значение при вводе и / или выходе из запроса.
Как только вы используете async (реактивный, исполнитель, ...), он завершится неудачей, так как часть вашего процесса будет запущена в другом потоке.