For example, the model above is quite deadlock-prone when you try to coordinate multi-object transactions.
Object-level locking is useful in many cases, and in combination with other mechanisms can provide a satisfactory solution to many threaded access problems in object-oriented programs.