На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Массив Потоков
    Цитата Konigsberg @
    Хотелось бы, что бы ещё wind глянул :)

    Konigsberg, я бы инкапсулировал блокировку в классе, аналогичном вашему Monitor:

    ExpandedWrap disabled
      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();
          }
          
      }
      А, ну это понятно, я в принципе не особо задумывался на счет "проектирования" этого кода... Меня просто всё смущает мой прием с notifyAll() и циклом while() - как то мне не очень нравится, но придумать лучше не смог :(
        Цитата Konigsberg @
        Меня просто всё смущает мой прием с notifyAll() и циклом while() - как то мне не очень нравится, но придумать лучше не смог :(

        Да нет, для примера нормально. Но лучше не использовать голые wait()/notify(), а обернуть их в классы вроде моего, иначе есть шанс помучиться уже с их синхронизацией (всё равно нужен флаг). А ещё лучше - использовать имеющиеся в пакете java.util.concurrent :)
        Сообщение отредактировано: wind -
          Цитата

          "я поток номер: 1, я поток номер 2,..." - ты сам то понимаешь что это бред?


          теперь понимаю, спасибо.

          Цитата

          И ещё - всё должно работать без подгонок с помощью sleep()


          я не знал. Спасибо за помощь
            Цитата wind @
            А ещё лучше - использовать имеющиеся в пакете java.util.concurrent

            Ну это если 5ку юзать, в 4-ке то их не было :)

            Цитата Nort0n @
            я не знал. Спасибо за помощь

            Не за что, лучше прочти про wait и notify :)
              Цитата Konigsberg @
              Ну это если 5ку юзать, в 4-ке то их не было :)

              У автора этих классов есть пакет и для java 1.4 - util.concurrent. Он хоть устроен немного иначе, но предоставляет тот же функционал.
                wind, сенкс :)

                Сообщения были разделены в тему "spam"
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0268 ]   [ 15 queries used ]   [ Generated: 2.05.24, 20:41 GMT ]