Что происходит с ресурсами используемыми в потоке при его отмене

«Что происходит с ресурсами используемыми в потоке при его отмене» — вопрос из категории Многопоточность, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При отмене потока (Thread.interrupt()) ресурсы не освобождаются автоматически. Ответственность за корректное освобождение лежит на разработчике.

Рекомендуется:

  1. Обрабатывать InterruptedException и освобождать ресурсы в finally блоке
  2. Проверять Thread.isInterrupted() в длительных операциях

Пример:

val thread = Thread {
    try {
        val resource = acquireResource()
        try {
            while (!Thread.interrupted()) {
                // работа с ресурсом
            }
        } finally {
            resource.release()
        }
    } catch (e: InterruptedException) {
        Thread.currentThread().interrupt()
    }
}
thread.start()
// ...
thread.interrupt()