I am new to Java multithreading and I would like to see If I am reasoning well.
From my understanding,
None of the methods that you've enumerated are
synchronized or use
synchronized blocks. Nevertheless they were all meant to be called in a multithreaded environment, so they provide the means to do this safely.
All of these methods except
Condition.signal() can be used without any locks being held.
signal()are roughly equivalents to
Object.notify(), so for practically all JDK implementations of the
Conditioninterface, you'll need to hold the lock associated with the condition variable.
All of these methods rely on a fundamental building block for the
java.util.concurrent package called
AbstractQueuedSynchronizer. It's a pretty elaborate thing (there's a whitepaper for it) that can provide the functionality of the
synchronized methods or blocks plus some additional goodies.
P.S. I assume you meant
Semaphore.release() instead of