In the first case,
@synchronized(self) { ... }
the code will not be executed simultaneously by two threads calling the method on the same
instance (self
). This is probably what you want if the code accesses or modifies the instance
in a thread-unsafe way.
In the second case,
@synchronized(thing) { ... }
the code will not be executed simultaneously by two threads calling the method with
the same argument (thing
).