I started using this and works fine, except if the process rolls back.
In case of a roll-back operation the process releases the locks and before it starts again other processes that are conditioned to acquiring locks from this process takes the locks and start processing as if the process that rolls back had finished.
Therefore, need to make sure there wont be a roll back when relying on Synchronized(), but this is not always possible.