2015-04-07 2 views
1

Я создал СемафорJava понятия многопоточности в семафоров

Semaphore semaphore = new Semaphore(1); 

Мы перегрузили aquire методы, такие как:

aquire() 
aquire(int) 

Q1: Для текущего семафора, где есть только один разрешение, будет ли второй способ (aquire(int)) иметь какое-либо значение?

Q2: Я еще немного путают с

new Semaphore(int) 
new Semaphore(int,true) 
new Semaphore(int, false) 

Q3: Если я позвоню release(), не вызывая aquire(), что происходит с количеством разрешений, делает это увеличение, чем то, что мы имеем объявили?

Примечание: существует несколько потоков, которые делят объект Semaphore.

Цените любую помощь.

ответ

1

Если ваш Semaphore начинается с одного разрешения, и один поток пытается получить более одного разрешения, то этот поток будет блокироваться. Предполагая, что ни один другой поток никогда не вызовет необходимое количество release, поток будет заблокирован на неопределенный срок.

boolean аргумент overloaded constructor указывает

если семафор будет гарантировать первый в первом из предоставления разрешений под раздора, иначе ложной

Число разрешений вы укажете в конструктор - это просто начальная сумма, а не предел.

+0

Спасибо за ответ, существует несколько потоков, которые делят объект 'Семафор' –

+3

@SashiKant. Количество разрешений, которые вы указываете в конструкторе, - это только начальная сумма, а не предел. –

+0

вверх 1 для вашего комментария, но я все еще путаюсь с *** Вопрос 2 и 3 *** –

1

Q2: Я еще немного путают с

new Semaphore(int)   //same as new Semaphore(i, false); 
new Semaphore(int,true)  //the Semaphore will be "fair". 
new Semaphore(int, false) //the semaphore will not be "fair". 

Булевы управления флагом, является ли справедливым семафор. «Ярмарка» означает, что, когда более чем один поток заблокирован в ожидании получения разрешений, тогда ожидающие потоки будут работать в строгом порядке первого порядка. Первый поток, который будет заблокирован, будет первым, который будет запущен, и так далее.

Когда Семафор не честный, то он может быть реализован алгоритмом, который потенциально дает более высокую производительность по сравнению с справедливым алгоритмом на некоторых компьютерных архитектурах.

+0

Спасибо за ваши вкладки, надеюсь, была бы возможность выбрать несколько правильных ответов, а не выбрать один :) –

Смежные вопросы