threadLocalTagCache can just be a ThreadLocal<Tag> rather than a Map<Thread,Tag>.
Simpler, and more efficient—less contention when many response handling threads need to use this.