Семафоры Java используют занятое ожидание или ожидание / уведомление по умолчанию? - PullRequest
5 голосов
/ 25 декабря 2011

Как вопрос идет.Я использую JDK 6.0 в Windows 7 и пытаюсь использовать семафоры в качестве механизма для решения проблемы синхронизации.Это работает отлично, но я пытаюсь избежать занятого ожидания в своей проблеме.

Я бы просто попросил документацию java и избавил бы SO от проблем, но документы выглядят так:1005 *http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Semaphore.html#acquire(int)

То есть документы, похоже, подразумевают оба ответа.Какой из них правильный?

Ответы [ 2 ]

1 голос
/ 25 декабря 2011

Я не понимаю, как это подразумевает занятое ожидание вообще.В нем четко говорится, что поток "отключен" и неактивен.По сути, это дешево: поток не будет тратить процессорное время, пока ожидает получения семафора.

0 голосов
/ 26 декабря 2011

Из-за этой строки явно ждать / уведомлять:

Если недостаточно разрешений, тогда текущий поток отключается для целей планирования потоков и неактивности.

Это означает, что поток не запланирован ОС до тех пор, пока не произойдет событие для его пробуждения (доступные разрешения семафора), после чего потоку будет сообщено о продолжении выполнения.

...