Во-первых, volatile это не просто "не кешируется в памяти потока".
docs.oracle.com/javase/tutorial/essential/concurre... Using volatile variables reduces the risk of memory consistency errors, because any write to a volatile variable establishes a happens-before relationship with subsequent reads of that same variable. This means that changes to a volatile variable are always visible to other threads. What's more, it also means that when a thread reads a volatile variable, it sees not just the latest change to the volatile, but also the side effects of the code that led up the change.
Во-вторых, как организовать работу с magicVar зависит от конкретных операций, которые будут с нею выполняться.