Java: Is volatile / final required for reference to synchronized object?
This seems a pretty basic issue, but I cannot find a clear confirmation. Let's say I have a class properly synchronized in itself: public class SyncClass { private int field; public synchronized void doSomething() { field = field * 2; } public synchronized void doSomethingElse() { field = field * 3; } } If I need to have a reference to an instance of that class, shared between threads, I do still need to declare that instance volatile or final , am I right? As in: public class MainClass { // previously OuterClass public static void main(String [ ] args) { final SyncClass mySharedObject = new