Default implementation which is backed by a static thread local.
A static thread local ensures we have one context per thread, as opposed to one per thread-
tracer. This means all tracer instances will be able to see any tracer's contexts.
The trade-off of this (instance-based reference) vs the reverse: trace contexts are not
separated by tracer by default. For example, to make a trace invisible to another tracer, you
have to use a non-default implementation.
Sometimes people make different instances of the tracer just to change configuration like
the local service name. If we used a thread-instance approach, none of these would be able to
see eachother's scopes. This would break
Tracing#currentTracer() scope visibility in a
way few would want to debug. It might be phrased as "MySQL always starts a new trace and I
don't know why."
If you want a different behavior, use a different subtype of
CurrentTraceContext,
possibly your own, or raise an issue and explain what your use case is.