Why use a ReentrantLock if one can use synchronized(this)? Why use a ReentrantLock if one can use synchronized(this)? multithreading multithreading