I must say this is troublesome. As for now I understand the following: 1. We should put volatile before variables which can be accessed from multiple threads. But how to know this? Should we look at the run() method only? 2. We can put volatile in front of each variable but this will eventually slow down the program (using slower memory). 3. No need to put volatile where's already 'final' modifier since this variable once set can't be changed anymore. The "Diligence..." task took me 5 tries to solve it even if it's marked as easy. Why exactly we must place volatile in that place?