Hi David,
Just to expand a bit on Ragu's post: threads act like mini-processes. When one is started it is given it's own memory space and the values of any variables it will need are copied to that memory. The thread executes, modifies it's copies of the variables, and then puts the results back into the main memory variable.
If you know that a particular variable is going to be accessed by multiple threads, as well as non-synchronized code you can mark the variable as 'volatile'. When the compiler sees that a thread will access a 'volatile' variable, it does not give the thread it's own copy; instead, all of the modifications made by the thread are made directly to the master copy.
For more info, check
JLS §17, particularly §17.7 Rules for Volatile Variables.
Hope that helps.
------------------
Jane Griscti
Sun Certified Programmer for the Java� 2 Platform