Locking is needed to ensure data integrity in a multi-user environment. Without appropriate locking, you might incorrectly overwrite changes made by other users, or read uncommitted data. Locking reduces concurrency.
Deadlocks sometimes occur.
A well tuned application has a high rate of concurrency and a low rate of deadlock. In reality, however, a tradeoff is usually necessary. This strategy tends to increase the lock wait time for other transactions. Conversely, a short wait time for locks is usually achieved by locking small portions of the data. This strategy can increase the number of deadlocks.