I think the problem can apply even when it’s a non-static field within your class. The ThreadLocal instance gets referenced not only by your class instance but also by an internal array within the Thread itself. As long as that thread is alive, the ThreadLocal instance will remain referenced from there. So, the potential for issues isn’t solely tied to whether the ThreadLocal field is static or not – it’s also about the lifecycle of the threads involved.
There have been real-world bugs stemming from this behavior. You can read the following GitHub issue. I think ThreadLocals are tricky. My advice would be to be extra safe with them.
But I don’t know if it leads to a bug in your case.