2010-03-03 2 views
1

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

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

ответ

5

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

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

alt text http://img13.imageshack.us/img13/8448/poolz.png

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

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

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

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

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