powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Выполнить задачу или выдать ошибку по таймауту
5 сообщений из 5, страница 1 из 1
Выполнить задачу или выдать ошибку по таймауту
    #39511560
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день
Подскажите, пожалуйста, какими способами (библиотеками), можно реализовать следующую задачу:

"Паром переправляет ровно десять машин. Машины подъезжают к парому в разном порядке. С момента появления первой машины паром ждет тридцать минут. В случае, если через этот интервал машин оказалось меньше, то выдать ошибку."

Насколько я понимаю, удобно было бы использовать CyclicBarrier, но непонятно, что делать с таймаутом и как выбрасывать ошибку
...
Рейтинг: 0 / 0
Выполнить задачу или выдать ошибку по таймауту
    #39511586
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimeinНасколько я понимаю, удобно было бы использовать CyclicBarrier, но непонятно, что делать с таймаутом и как выбрасывать ошибку
1. Зачем барьер - мне не понятно. Получили машину, если очередь пустая - поставили таймер. Набрали 10 машин - сбросили таймер. Таймер сработал, а в очереди нет 10 машин - ошибка.

2. Вы путаете "выбросить исключения" и "выдать ошибку". В задании, по вполне разумным причинам, нет ничего про выбрасывание исключения.

3. Для задач чувствительных к точному времени лучше всего брать Quartz. Остальные реализации дают менее точные и не стабильные решения.
...
Рейтинг: 0 / 0
Выполнить задачу или выдать ошибку по таймауту
    #39511612
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz1. Зачем барьер - мне не понятно. Получили машину, если очередь пустая - поставили таймер. Набрали 10 машин - сбросили таймер. Таймер сработал, а в очереди нет 10 машин - ошибка.

А как мониторить, что набралось 10 машин? Постоянно опрашивать очередь на количество элементов? Или просто по истечению таймера посмотреть количество?

И еще вопрос - этот вариант работает, если нет разницы, какие машинки, а важно только их количество.
А если необходимо учитывать их цвет, как быть? То есть, оправлять паром, когда набралось 10 синих или красных. И выдать ошибку, если после приезда синей прошло 30 минут, а десять синих так и не появилось.
...
Рейтинг: 0 / 0
Выполнить задачу или выдать ошибку по таймауту
    #39511629
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimeinА как мониторить, что набралось 10 машин?

А зачем мониторить? После добавления в очередь, проверить её размер. У вас есть это событие, если есть добавление.

TimeinПостоянно опрашивать очередь на количество элементов? Или просто по истечению таймера посмотреть количество?

По истечении. Я же, вроде, написал выше.

TimeinИ еще вопрос - этот вариант работает, если нет разницы, какие машинки, а важно только их количество.
А если необходимо учитывать их цвет, как быть? То есть, оправлять паром, когда набралось 10 синих или красных. И выдать ошибку, если после приезда синей прошло 30 минут, а десять синих так и не появилось.
В эту игру можно играть бесконечно. На каждый ответ, будет выдумываться новое требование?
Ну, добавьте счетчики на каждый цвет.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
void addToQueue(Car car){
   Color color = car.gerColor();
   if(queue.hasNoEntries(car -> car.isOf(color)){
       startTimer(color);
   }

   queue.add(car);

   Counter c = colorCouters.getOrCreate(color);
   c.increment();
    
   if(c.value() >= transferThreashold){
      cancelTimer(color);      
      Collection carsToTransfer = queue.pullMatches(car -> car.isOf(color));
      transfer(carsToTransfer);
   }
}
...
Рейтинг: 0 / 0
Выполнить задачу или выдать ошибку по таймауту
    #39511893
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timein, мне вспоминается лекция толи Шипилёв толи Елизарова. На тему
мультипоточности. И там звучал главный тезис. Самый лучший подход
при работе с мультипоточностью - НЕ использовать мультипоточность.
И это правда. Объективно мало задач требуют кодинга барьеров,
мьютексов и критических секций.

В вашей постановке - сложно "натянуть" мультипоточность на паром.
Тоесть натянуть-то можно... но способов настолько много что мы
тут подерёмся насмерть выбирая правильный ТруЪ способ.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Выполнить задачу или выдать ошибку по таймауту
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]