|
|
|
Выполнить задачу или выдать ошибку по таймауту
|
|||
|---|---|---|---|
|
#18+
Добрый день Подскажите, пожалуйста, какими способами (библиотеками), можно реализовать следующую задачу: "Паром переправляет ровно десять машин. Машины подъезжают к парому в разном порядке. С момента появления первой машины паром ждет тридцать минут. В случае, если через этот интервал машин оказалось меньше, то выдать ошибку." Насколько я понимаю, удобно было бы использовать CyclicBarrier, но непонятно, что делать с таймаутом и как выбрасывать ошибку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2017, 13:02 |
|
||
|
Выполнить задачу или выдать ошибку по таймауту
|
|||
|---|---|---|---|
|
#18+
TimeinНасколько я понимаю, удобно было бы использовать CyclicBarrier, но непонятно, что делать с таймаутом и как выбрасывать ошибку 1. Зачем барьер - мне не понятно. Получили машину, если очередь пустая - поставили таймер. Набрали 10 машин - сбросили таймер. Таймер сработал, а в очереди нет 10 машин - ошибка. 2. Вы путаете "выбросить исключения" и "выдать ошибку". В задании, по вполне разумным причинам, нет ничего про выбрасывание исключения. 3. Для задач чувствительных к точному времени лучше всего брать Quartz. Остальные реализации дают менее точные и не стабильные решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2017, 13:22 |
|
||
|
Выполнить задачу или выдать ошибку по таймауту
|
|||
|---|---|---|---|
|
#18+
Blazkowicz1. Зачем барьер - мне не понятно. Получили машину, если очередь пустая - поставили таймер. Набрали 10 машин - сбросили таймер. Таймер сработал, а в очереди нет 10 машин - ошибка. А как мониторить, что набралось 10 машин? Постоянно опрашивать очередь на количество элементов? Или просто по истечению таймера посмотреть количество? И еще вопрос - этот вариант работает, если нет разницы, какие машинки, а важно только их количество. А если необходимо учитывать их цвет, как быть? То есть, оправлять паром, когда набралось 10 синих или красных. И выдать ошибку, если после приезда синей прошло 30 минут, а десять синих так и не появилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2017, 13:44 |
|
||
|
Выполнить задачу или выдать ошибку по таймауту
|
|||
|---|---|---|---|
|
#18+
TimeinА как мониторить, что набралось 10 машин? А зачем мониторить? После добавления в очередь, проверить её размер. У вас есть это событие, если есть добавление. TimeinПостоянно опрашивать очередь на количество элементов? Или просто по истечению таймера посмотреть количество? По истечении. Я же, вроде, написал выше. TimeinИ еще вопрос - этот вариант работает, если нет разницы, какие машинки, а важно только их количество. А если необходимо учитывать их цвет, как быть? То есть, оправлять паром, когда набралось 10 синих или красных. И выдать ошибку, если после приезда синей прошло 30 минут, а десять синих так и не появилось. В эту игру можно играть бесконечно. На каждый ответ, будет выдумываться новое требование? Ну, добавьте счетчики на каждый цвет. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2017, 14:01 |
|
||
|
Выполнить задачу или выдать ошибку по таймауту
|
|||
|---|---|---|---|
|
#18+
Timein, мне вспоминается лекция толи Шипилёв толи Елизарова. На тему мультипоточности. И там звучал главный тезис. Самый лучший подход при работе с мультипоточностью - НЕ использовать мультипоточность. И это правда. Объективно мало задач требуют кодинга барьеров, мьютексов и критических секций. В вашей постановке - сложно "натянуть" мультипоточность на паром. Тоесть натянуть-то можно... но способов настолько много что мы тут подерёмся насмерть выбирая правильный ТруЪ способ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2017, 20:54 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2122628]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
11ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 192ms |
| total: | 341ms |

| 0 / 0 |
