Что такое Apache Commons Pool close () - PullRequest
3 голосов
/ 17 декабря 2009

Я хотел реализовать пул в части моего приложения. Я хочу использовать библиотеку Commons Pool, но немного обеспокоен тем, как работает поведение close(). Из рассмотрения javadocs и исходного кода не ясно, будут ли уничтожены объекты, созданные в пуле, при вызове метода close(). Из того, что я вижу, будут уничтожены только те объекты, которые простаивают в пуле - любые, которые используются и еще не были возвращены, не будут затронуты.

Я что-то здесь упустил? Я хочу быть уверен, что все объекты будут уничтожены правильно при закрытии пула.

Кто-нибудь использовал это раньше и имел представление о том, как это работает?

Ответы [ 2 ]

2 голосов
/ 17 декабря 2009

Вообще говоря (независимо от библиотеки пулов) уничтожать используемый объект небезопасно. Это, скорее всего, приведет к исключению. Если вы хотите гарантировать чистое закрытие, тогда вам нужно убедиться, что все объекты были возвращены в пул.

Есть ли причина, по которой вы закрываете все объекты, возвращенные в пул?

1 голос
/ 23 июля 2017

Как указано в javadoc для метода close в Commons Pool 2, при вызове этого метода пустые экземпляры уничтожаются, но экземпляры, извлеченные для клиентов, не затрагиваются. После close, borrowObject завершится с ошибкой IllegalStateException, но returnObject будет успешным, а возвращаемый экземпляр будет уничтожен при возврате. Поэтому, если ваши клиенты могут рассчитывать на возврат объектов после закрытия пула, экземпляры будут очищены. Если вы хотите заблокировать, пока это не будет сделано, смотрите numActive. close также отменяет регистрацию пула в jmx, поэтому в этом случае используйте getNumActive напрямую.

...