Java ThreadLocal: When and How to Use Per-Thread Variables | CodeTrail