Gymterview
junior

Как отписаться от потока для предотвращения утечки памяти?

Отписка от реактивного потока выполняется через вызов dispose() на объекте Disposable, полученном из подписки, или через автоматические операторы ограничения потока.

Способы отписки

  • Disposable — получить Disposable из подписки и вызвать dispose() для отмены
  • BaseSubscriber — наследоваться от BaseSubscriber и вызвать dispose()
  • Операторы при создании потока:
    • take(n) — автоматически отменяет подписку после получения n элементов
    • timeout(Duration) — автоматически отменяет подписку при истечении времени ожидания

Best Practice

Настраивайте отмену подписки, связывая её с жизненным циклом компонента (например, @PreDestroy в Spring).

На собеседовании: интервьюер проверяет понимание утечек памяти в реактивном коде. Частая ошибка — забыть про Disposable и считать, что потоки автоматически завершаются. Бесконечные потоки (interval, SSE) требуют явной отписки.