|
|
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
По результатам собеседования, решил озадачиться таки вопросом: написать самый просто пул. Основная идея что пул ограничен размером и пользователь сам должен следить за возвратом объектов. Если же все объекты разобраны, то ждём пока кто-то вернёт объект в пул. Вот что получилось Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. По тесту работает как задумано. Но возможно есть какие-то фундаментальные ошибки? Первый, так сказать, блин. Замечания, предложения, советы, приветствуются. ----- Если дела идут плохо, есть вероятность, что в ближайшее время они пойдут ещё хуже.(с)Мерфи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 10:44 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
Задлянафига все эти многабукав, если существует j.u.c.ArrayBlockingQueue ??? Кроме того, ждать возврата соединений в пустой пул - плохая идея: вместо того, чтобы выдать предупреждение, которое сможет увидеть администратор системы, мы тормозим работу клиентов без всякой диагностики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 10:49 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
И, кстати, ещё о фундаментальных ошибках: synchronized - критическая секция. Ввод-вывод в критической секции - плохая идея: выставили (под)отчётные флаги, вышли из секции и отчитались о проделанной работе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 11:21 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
А зачем цикл while и вторая проверка на размер очереди? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 11:25 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
DDiver, InterruptedException, разве не должен выходить из цикла? barrow это "тележка" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 11:27 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
no56892А зачем цикл while и вторая проверка на размер очереди? Потому что wait всегда нужно оборачивать в логическое условие. Но можно было, конечно, и одним условием обойтись, а не копипастой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 11:29 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov , вывод это просто для теста, чтобы можно было понять что там происходит. Буду иметь ввиду, спасибо. Blazkowicz , обшибся :( конечно там должно быть borrow да, с эксепшеном лоханулся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 11:32 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
no56892А зачем цикл while и вторая проверка на размер очереди? по while уже ответили, а вторая проверка чисто для "посмотреть логику" что после ожидания тред получил что хотел. По хорошему достаточно и верхнего while. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 11:39 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
DDiver, Просто конечно, но - Пул не проверяет, что вернули то что взяли. - Пул не проверяет, что один элемент вернули один раз. - Пул не проверяет взаимную блокировку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 12:34 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев - Пул не проверяет взаимную блокировку. о чем речь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 12:36 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, ThreadA Взял объект ThreadB Взял объект ThreadA Хочет взять объект ThreadB Хочет взять объект А их, если я не путаю всего 2. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 12:42 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
Побольше бы таких вопросов, всегда узнаешь что-то новое :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 13:01 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевDDiver, Просто конечно, но - Пул не проверяет, что вернули то что взяли. - Пул не проверяет, что один элемент вернули один раз. - Пул не проверяет взаимную блокировку. - Первую проблему думаю можно решить используя например две мапа вместо одной очереди, и просто перемещать отданные объекты из мапы свободных в мапу занятых. Если вернут не тот объект, то он не будет найден в мапе отданных и соответственно перемещён обратно в свободные. Хотя наверное есть более изящный способ. - Мапы также решат и вторую проблему. (При условии что повторная попытка вернуть не будет произведена, после того как объект уже отдан ещё одному потоку) в противном случае ИМХО нужно как-то пристёгивать к объекту какой-либо идентификатор. - А вот что делать со взаимной блокировкой… ЗЫ вот так что-то простое и превращается во что-то сложное :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 13:36 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
YamahaR1Побольше бы таких вопросов, всегда узнаешь что-то новое :) от туда же: как реализовать метод equals при наследовании? переопределять его в наследниках или нет? если переопределять то как? ответ нашёлся у Джошуа блоха , хотя он же говорит что плохая идея сравнивать разные классы между собой(если ничего не путаю). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 13:51 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
DDiverYamahaR1Побольше бы таких вопросов, всегда узнаешь что-то новое :) от туда же: как реализовать метод equals при наследовании? переопределять его в наследниках или нет? если переопределять то как? ответ нашёлся у Джошуа блоха , хотя он же говорит что плохая идея сравнивать разные классы между собой(если ничего не путаю). Вот так вот сходу тяжело сказать, надо читать Блоха :) Было бы хорошо создать отдельный топик и туда такие задачки постить, помнится коллега Atum таким занимался в свое время... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 14:08 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев - Пул не проверяет, что вернули то что взяли. - Пул не проверяет, что один элемент вернули один раз.Это всё - проблемы клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 14:22 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Клиент может денег не заплатить, или штраф впаять, если программа будет плохо написана. Кроме того если предположить, что пул динамический и добавляться-удаляться в общий список объекты могут по независимым от получившего процесса обстоятельствам, то это не только проблемы получившего процесса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 15:34 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев Клиент может денег не заплатитьКроме клиентов заказчиков есть "код, использующий нечто". Это тоже клиенты.Кроме того если предположить, что пул динамический и добавляться-удаляться в общий список объекты могут по независимым от получившего процесса обстоятельствам, то это не только проблемы получившего процесса.Ещё раз. Код, забравший объект из пула, обязан вернуть объект в пул. Трудности, которые при этом придётся преодолеть программисту, работающему с объектом вне пула - никого не колышут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 16:07 |
|
||
|
Вопрос в академических целях
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovКод, забравший объект из пула, обязан вернуть объект в пул. Код могли прибить это раз. (кстати строка 4) Ваша фраза не имеет отношения к проверке того, что тот кто взял возвращает то, что взял, и только один раз. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2014, 16:03 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38804755&tid=2126263]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
436ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
| others: | 232ms |
| total: | 799ms |

| 0 / 0 |
