Java.util.concurrent.Semaphore: ¿Qué es y cómo se usa?

Java.util.concurrent.Semaphore: ¿Qué es y cómo se usa?