Дизайн для ConnectionPool - PullRequest
1 голос
/ 03 марта 2010

Когда кто-то просит вас написать (сделать / изобразить) дизайн для Connection Pool в интервью Java, что вы обычно пишете.

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

1 Ответ

5 голосов
/ 03 марта 2010

Шаблон пула объектов (и пул соединений - частный случай этого) очень подробно описан в паттернах Марка Гранда в Java. Том 1' .

Вот базовая диаграмма классов (из изображений Google):

альтернативный текст http://img13.imageshack.us/img13/8448/poolz.png

Основная идея: Client не должен сам создавать Reusable объектов. Вместо этого он должен использовать ReusablePool. Чтобы получить Reusable объект, он должен вызвать acquireReusable. Когда ему больше не нужен объект Reusable, он должен положить его обратно через releaseReusable.

ReusablePool содержит список Reusable объектов. Когда Client запрашивает Reusable, пул ищет существующие свободные Reusable. Если получены все Reusable объекты, то, если размер списка меньше, чем maxSize ReusablePool создает еще один Reusable объект. Когда размер списка равен maxSize, пул не создает новые Reusable. Вместо этого он ждет, пока какой-нибудь другой клиент вернет ему какой-либо объект Reusable.

Из этого описания можно сделать 2 вывода:

  1. Reusable объекты не должны иметь состояния (или их состояние должно быть «очищено» в методе releaseReusable)

  2. ReusablePool обычно является частью многопоточных приложений, и все средства синхронизации внутри всех его методов должны быть реализованы надлежащим образом (и это не простая задача).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...