"Before you can write decent multi-threaded code, however, you really need to study more on the complexities and subtleties of multi-threaded code.
When it comes to threads, very little is guaranteed.
Can you imagine the havoc that can occur when two different threads have access to a single instance of a class, an both threads invoke methods on that object... and those methods modify the state of the object? ... it's too scary to even visualize.", from Sun Certified Programmer for Java 6, chapter 9: Threads.
My friend,
In Java, threads doesn't cache any object or variable, they just have a reference to an instance of an object. Talking about thread cache memory is more like talking about operative systems threads... Java works in the same way in all OS, no matter how threads are managed internally, which differs very much depending on the different OS's.
Look a this code:
AccountDanger r = new AccountDanger();
Thread one = new Thread(r):
Thread two = new Thread(r);
As you can see, in this case threads have access to the same instance: r. Then, you will have synchronization problems, for sure... it doesn't matters if we talk about native or object members, threads one and two will have access to all members of r (if they are accessible via scope or setters/getters) and they will read directly the values from r instance. This is for sure even if you don't notice it, which is sometimes really hard.
I recommend you reading about java scopes and java synchronization, if you want to code multi-threaded applications.
Regards,