Объект синхронизации Семафор реализует классический светофор. Светофор контролирует доступ к ресурсу, который используется счетчиком. Если счетчик больше нуля, доступ предоставляется; Если он равен нулю, доступ запрещен. Счетчик подсчитывает разрешения, которые разрешают доступ к общему ресурсу. Затем для доступа к ресурсу поток должен получить разрешение от светофора. В общем, чтобы использовать светофор, поток, который хочет получить доступ к общему ресурсу, пытается получить разрешение. Если число светофоров больше нуля, поток получает разрешение, и количество светофоров уменьшается. В противном случае поток заблокирован, пока не получит разрешение. Когда потоку больше не требуется доступ к общему ресурсу, он освобождает разрешение, поэтому количество светофора увеличивается. Если есть другой поток, ожидающий разрешения, он получает разрешение в это время. Класс Java семафора реализует этот механизм.
Семафор имеет два строителя:
Semaphore(int num)
Semaphore(int num, boolean come)
num указывает начальный счет разрешения. Тогда num указывает количество потоков, которые могут получить доступ к общему ресурсу в данный момент времени. Если num равен единице, он может обращаться к ресурсу по одному потоку за раз. Установив come как true, вы можете гарантировать, что ожидающим потокам будет предоставлено разрешение в порядке их запроса.