Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.116.8.110] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Konigsberg, я бы инкапсулировал блокировку в классе, аналогичном вашему Monitor: class PassThruLock { int counter = 0, maximum; public PassThruLock(int maximum) { this.maximum = maximum; } public synchronized void tryPass(int number) throws InterruptedException { while (number != counter) { wait(); } } public synchronized void passed() { counter = (counter + 1) % maximum; notifyAll(); } } |
Сообщ.
#17
,
|
|
|
А, ну это понятно, я в принципе не особо задумывался на счет "проектирования" этого кода... Меня просто всё смущает мой прием с notifyAll() и циклом while() - как то мне не очень нравится, но придумать лучше не смог
|
Сообщ.
#18
,
|
|
|
Цитата Konigsberg @ Меня просто всё смущает мой прием с notifyAll() и циклом while() - как то мне не очень нравится, но придумать лучше не смог Да нет, для примера нормально. Но лучше не использовать голые wait()/notify(), а обернуть их в классы вроде моего, иначе есть шанс помучиться уже с их синхронизацией (всё равно нужен флаг). А ещё лучше - использовать имеющиеся в пакете java.util.concurrent |
Сообщ.
#19
,
|
|
|
Цитата "я поток номер: 1, я поток номер 2,..." - ты сам то понимаешь что это бред? теперь понимаю, спасибо. Цитата И ещё - всё должно работать без подгонок с помощью sleep() я не знал. Спасибо за помощь |
Сообщ.
#20
,
|
|
|
Цитата wind @ А ещё лучше - использовать имеющиеся в пакете java.util.concurrent Ну это если 5ку юзать, в 4-ке то их не было Цитата Nort0n @ я не знал. Спасибо за помощь Не за что, лучше прочти про wait и notify |
Сообщ.
#21
,
|
|
|
Цитата Konigsberg @ Ну это если 5ку юзать, в 4-ке то их не было У автора этих классов есть пакет и для java 1.4 - util.concurrent. Он хоть устроен немного иначе, но предоставляет тот же функционал. |