If you just want to do a simple operation like set a flag, (done = true) or check a flag, (if (done != true) { blah } ), there is really little reason to synchronize in order to be
thread safe. You can just declare the variable as volatile and avoid synchronization all-together.
Prior to JDK 1.5, this was probably the only useful case. With 1.5 and later, you have atomic variables, which are build using volatile variable. With atomic variables, you can -- in theory -- avoid synchronization all-together.
Henry